|
国内のオープンソースコミュニティとプロジェクトの継続的な発展に伴い、ますます多くの開発者がオープンソースプロジェクトを学習し、応用し、貢献しています。最近、複数のオープンソースプロジェクト(KVM/QEMU、libvirt、OpenStack、Ceph、Zabbixなど)を研究してきた業界専門家のZhang Yu氏が、自身のブログでオープンソースプロジェクトを学習するためのいくつかの提案を共有しました。一読の価値があります。 Zhang Yu 氏は、オープンソース プロジェクトの学習は次の 5 つのレベルに分けられると考えています。 1. プロジェクトの基本概念、用途、論理構造、基本原理、背景、および適用シナリオを理解する。このレベルは基本的に「ポピュラーサイエンス」です。プロジェクトの基礎的な理解のみが必要で、短期間で実際の技術作業を開始する必要がない場合は、現時点ではこのレベルで十分です。 2. プロジェクトの基本的なインストール手順と使用方法を習得します。このレベルは基本的に「入門」であり、プロジェクトの直感的な理解と、インストールと使用に関する実践的な経験を提供します。プロジェクトを現状のまま使用する必要がある場合は、このレベルで初期学習に十分です。 3. コード構成を理解し、主要なロジック/機能モジュールとコードファイルの対応関係を特定し、コード分析を通じていくつかの主要な代表的な実行フローを辿ります。このレベルの基本的な目標は「深く掘り下げる」ことであり、プロジェクトの実際の実装を理解し始めることです。プロジェクトの機能、動作原理、コード実装を真に結び付け、プロジェクトのワークフローを直感的に理解できるようになります。このレベルは、オープンソースプロジェクトのコード学習の真の始まりです。このプロジェクトをベースにアプリケーションを開発したり、関連性の高い他のプロジェクトに取り組んだりする場合、このレベルのプロジェクトコード理解は非常に役立ちます。 4. プロジェクト内のすべてのコードモジュールとプログラムファイルの機能を理解し、主要な実行フローをすべて操作できる。このレベルの基本的な目標は「習熟」であり、プロジェクトの設計と実装を包括的かつ体系的に理解し、プロジェクトの各部分のコードに精通することを意味します。プロジェクトを詳細にカスタマイズまたは変更したり、コミュニティに貢献したりしたい場合は、このレベルに到達することを目指す必要があります。 5. プロジェクトの様々な設計コンセプトとコード実装の詳細を徹底的に研究し、理解する。このレベルにおける基本的な目標は「熟達」、つまり卓越性を目指し、学びは無限であることを認識することです。これは専門家が追求する領域です。プロジェクトコミュニティへの重要な貢献者、あるいはコアコントリビューターを目指すなら、このレベルを目指すべきです。 オープンソースプロジェクトについて学ぶには、基礎知識を習得することが不可欠です。Zhang Yu氏は3つの重要なポイントを指摘しました。
学習目標と基礎知識が定まったら、次のステップは学習戦略とプロセスを構築することです。張宇は、表面から核心へと進み、徐々に理解を深めていく学習法をまとめました。
著者は「OpenStack Cinder」を例に挙げて、オープンソース プロジェクトから学ぶ方法を説明しています。 1. まず、Cinderを分析するには、いくつかの基本的な概念を理解する必要があります。クラウドコンピューティングとは何か?ブロックストレージとは何か?OpenStackとは何か?OpenStackにおけるCinderの役割とは何か?などなど。これらの概念を理解しなければ、それ以上の学習は非常に困難になります。 2. これを踏まえ、可能であれば、***Cinder(その他の必要なOpenStackコンポーネントを含む)を実際に導入・運用し、Cinderの直感的な理解と体験を積むことで、その後の分析の参考としてください。ここでは、CinderのバックエンドとしてCephを使用し、OpenStack上で動作する仮想マシンとしてKVMを使用していることを前提としています。 3. 次に、分析対象システムの論理フレームワークを概念的に理解する必要があります。一般的には、HorizonとNovaの論理モジュール構造、それらの連携動作方法、そしてCinderとの関係を理解する必要があります。この部分は、Cinderの制御インターフェースと実行パスの分析と密接に関連しています。さらに、CinderとKVM/QEMU、Cephの相互関係を理解する必要があります。これは、Cinderを真に理解する上で非常に役立ちます。Cinderの観点から、内部の論理モジュール構成、それぞれの機能、相互制御、データ接続関係を理解する必要があります。 4. 上記の準備が完了したら、Cinder コードの解析を開始できます。前述の通り、解析対象として制御インターフェースとデータインターフェースの両方から、主要な代表的なインターフェースを1つまたは2つ選択することを検討してください。設定インターフェースについては、特定の設定を実装していると想定すれば十分であり、今のところあまり時間をかける必要はありません。Cinder の中核機能は、実際には OpenStack 上のボリューム管理です。少なくとも Cinder+Ceph ソリューションにおいては、Cinder 自体はデータ転送のクリティカルパス上にはありません。したがって、Cinder ソースコード解析においては、制御インターフェースの解析が最も重要です。初期段階では、ボリューム作成とアタッチという2つのインターフェースとそれに対応する実行フローが、Cinder 解析の出発点となります。これら2つの操作の実行フローを徹底的に理解すること(少なくとも librbd を介して Cinder と Ceph がどの程度相互作用するかを把握すること)は、Cinder の機能と実装を真に理解する上で非常に役立ちます。 KVM ベースの仮想マシンは、Cinder によって作成された Ceph 提供のボリュームにアクセスするときに QEMU 経由で Cinder にアクセスしません。つまり、ソース コードのこの部分は Cinder ソース コードの学習範囲を超えていますが、Cinder を本当に徹底的に理解したいのであれば、この部分についてある程度の知識を持っているか、少なくとも概念的に理解している必要があります。 さらに、著者は、メモをしっかり取る、細部にこだわりすぎないといったアドバイスも提供しています。全文はZhang Yuのブログでご覧いただけます。InfoQ読者の皆様は、オープンソースプロジェクトについて学んだ経験をぜひ共有してください。 |