IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第24回 Gitでオープンソースの考古学調査?! (中井悦司) 2013年7月

はじめに

 前回は、OpenStackを手軽にインストールするためのツール「Packstack」を紹介しました。その後も継続して、さまざまな構成パターンについて、Packstackを利用したインストール方法を検討しています。実はその中で、構築済みの環境に対して、後からコンピューティングノードを追加する作業をPackstackで行うと、意外と手順が面倒になることに気が付きました。
 ―― どうしたものかと思案したのですが、結局、自分で機能拡張のパッチを書いて、取り込んでもらうことにしました。現在、Packstackは、OpenStackのサブプロジェクトになっており、OpenStack本体と同じシステムでパッチの投稿を受け付けるようになっています。この後で紹介する、「Git」を使ってソースコードの差分を送ると、「Gerrit」と呼ばれるシステム上で、プロジェクトメンバーによるレビュープロセスが開始されます。
 無事にレビューが通って、採用されたパッチはこちらから参照できます。アップストリームに取り込まれた機能は、この後、RDOに含まれるPackstackがバージョンアップするタイミングで、そちらにも反映されることになります。今回の機能拡張を利用したコンピューティングノードの追加方法は、いずれまた、筆者のBlogなどで紹介したいと思います。

Gitでソースコードを読む方法

 先ほど「Gitを使ってソースコードの差分を送る」という話をしました。Gitは、日々更新されていくソースコードについて、「いつ、誰が、どこを、どのように変更をしたのか」をすべて記録する機能があります。これにより、新しい機能を追加する場合は、追加機能による変更部分だけを抽出して、レビューシステムに送信することができるわけです。
 現在のソースコードの1行1行について、過去の変更履歴を追跡することも可能です。それぞれの変更に対して、変更の理由を記述したコメントが残るようになっていますので、ソースコードを読んでいて、ある部分の処理内容がよく分からない場合、その部分を書いた人のコメントを参照すると、非常に参考になることがよくあります。
 さらに、その変更を適用する前のソースコードの状態を再現することもできてしまいます。ソースコードの変化の様子を過去に遡ってたどっていくという、「考古学」的な楽しみ方もできるわけです。
 せっかくですので、簡単な使用例を紹介してみましょう。Red Hat Enterprise Linuxをインストールしたサーバで、次のコマンドを実行すると、インターネット上で公開されているLinuxカーネルのソースコードをダウンロードすることができます。

# yum install -y git
# git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
# cd linux-2.6

 ダウンロード先のURLに「torvalds」とあることからも分かるように、Linus氏が管理する最新のソースコードが手元のサーバにダウンロードされます。Gitによる管理形式のままでダウンロードされますので、この後は、手元のサーバ上で、gitコマンドを使って、ソースコードの調査が可能になります。
 たとえば、次のコマンドは、「init/version.c」というファイルの1行1行について、その部分のコードが作成された日時と作成者が表示されます。

$ git blame init/version.c
...(中略)...
4865ecf1 (Serge E. Hallyn   2006-10-02 02:18:14 -0700 40) EXPORT_SYMBOL_GPL(init_uts_ns);
3eb3c740 (Roman Zippel      2007-01-10 14:45:28 +0100 41) 
c71551ad (Linus Torvalds    2007-01-11 18:18:04 -0800 42) /* FIXED STRINGS! Don't touch! */
c71551ad (Linus Torvalds    2007-01-11 18:18:04 -0800 43) const char linux_banner[] =
3eb3c740 (Roman Zippel      2007-01-10 14:45:28 +0100 44)       "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
3eb3c740 (Roman Zippel      2007-01-10 14:45:28 +0100 45)       LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
...(以下省略)...

「FIXED STRINGS! Don't touch!(固定文字列!だれも触るな!)」なんて、ちょっと過激なコメントがありますが、これはLinus自身が2007年1月11日に記載したものと分かります。先頭部分の文字列「c71551ad」は、この変更に振られたID番号で、この番号を指定して、変更内容の詳細を確認することができます。

$ git show c71551ad
...(中略)...
-/* FIXED STRING! Don't touch! */
-const char __init linux_banner[] =
+/* FIXED STRINGS! Don't touch! */
+const char linux_banner[] =
        "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
        LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";

 ここでは省略していますが、コマンド出力の最初に変更内容の説明が表示されます。最後の部分は、変更前後の差分を示します。上記の結果を見ると、Linusは、以前は「FIXED STRING!」(単数形)だったものを「FIXED STRINGS!」(複数形)に修正しただけと分かります。―― ちょっと肩透かしな感じですね。一番最初にこのコメントを書いたのは誰なのか、非常に気になります。
 ここで利用するのが、過去のソースコードを再現する機能です。次のコマンドを実行すると、Linusがこの変更を加える直前のソースコードの状態が再現されます。

$ git checkout c71551ad^

 ID番号の後ろの「^」は、「指定ID番号を適用する直前の状態」という意味です。実際に「init/version.c」を開いてみると、先ほど確認した最新の状態とは内容が異なっています。ディレクトリ内のファイル一式がすべて過去にタイムスリップしたわけです!
 ここで改めて、「git blame」を実行することで、この時点のソースコードを書いた人物を改めて特定することができます。先ほどと同様に「git show」「git checkout」を繰り返すことで、どこまでも過去の歴史を遡ることができます。ここから先の探求は読者のみなさんにお任せしたいと思いますが、結論としては、例のコメントを最初に書いたのはやっぱりLinusでした。その際の変更IDは「8993780a」ですので、次のコマンドで、変更についての説明を参照することができます。

$ git show 8993780a

 出力結果は、あえて省略しておきます。みなさん自身の手で、Linusによる変更の理由説明を確認してください。

次回予告

 今回は、Gitを利用して、ソースコードの変遷を追いかける話題をお届けしました。少し駆け足でしたが、Gitの利用方法の雰囲気は伝わったと思います。Gitの使い方をマスターしておくと、オープンソースへの関わり方が、ぐっと広がります。一度、時間をかけて勉強しておくことをお勧めします。参考書は、[*1][*2]などがお勧めです。
 さて、今週は「VIOPS08 WORKSHOP」に参加してきます。次回は、このイベントから、何か面白そうな話題をお届けできればと思います。

参考資料

*1)「入門git」Travis Swicegood (著), でびあんぐる (翻訳) オーム社 (2009)

*2)「Gitポケットリファレンス」岡本 隆史 (著), 武田 健太郎 (著), 相良 幸範 (著) 技術評論社 (2012)

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes