第1回 コードリーディングを始めよう
倉貫 義人
松村 章弘
TIS株式会社
技術本部
基盤技術センター
2008/9/26
優れたプログラマはコードを書くのと同じくらい、コードを読みこなせなくてはならない。優れたコードを読むことで、自身のスキルも上達するのだ(編集部)
- - PR -
Ruby on Rails(Rails)には、scaffoldという大変便利な機能が付いています。scaffoldを使えば、アプリケーションの実行に必要なデータベースのスキーマの準備から、データベースにアクセスするコード、画面周りのコードまで、一通り自動生成してくれます。
そのおかげもあって、多くの開発者がscaffoldを使ったRailsのアプリケーションを試しに作ったことでしょう。ただし、scaffoldはあくまで土台であって、その後は、生成されたコードを拡張していく必要があります。
本連載ではコードリーディングという形で、オープンソースとして公開されているRailsアプリケーションのソースコードを題材に使って、その動きや機能がどのように実装されているのかを、ソースコードのレベルで解説します。また、そこの処理の中で使われているRailsの特徴についても紹介していきます。
コードリーディングとは
コードリーディングとは、その言葉のままですが、プログラムのソースコードを読解することです。プログラマにとって、プログラミングこそが本懐ではありますが、実際にプログラムを書いている時間と、すでに書かれたプログラムを読む時間を比べてみると、おそらく多くのプログラマにとっては後者の方が長いのではないでしょうか。
他人の書いたプログラムを読んで解析し、改修を加えていくという作業はもとより、自分自身の書いたプログラムも読み返して改修する機会も多くあるはずです。例えば、保守開発という形で、すでに完成したアプリケーションをメンテナンスしていく作業がありますが、新規に書き加える部分よりも事前に確認するために読むソースコードの方が多いはずです。
新規開発の場合でも実は同じことがいえます。新しい機能を追加していくときなど、影響範囲の確認や既存で使える部品がないか、といった確認をしているはずです。このように、ソースコードを読む機会は非常に多くあります。コードリーディング自体は非常に身近なものなのです。
題材「SKIP」について
本連載では「SKIP」と呼ばれる社内SNSのアプリケーションを題材として扱います。SKIPは、筆者の所属する会社内で運営してきたSNSをオープンソースとして公開したものです。
オープンソースとしての公開は2008年6月に行われましたが、社内では2005年から使われており、約3年に近い運用実績があります。現在公開されているのは、バージョン0.9という状態で、主に開発者向けに公開しています。
SKIPは、企業内での利用を想定したSNSということで、社員が利用するブログやグループ(コミュニティ)などの一般的なSNSの機能に加え、Q&A機能やソーシャルブックマーク、全文検索などが統合されている点が特徴です。
実際に、どういった動きをするのかを確認できるように、SKIPの公式サイトでデモサイトを用意しています。以下のアドレスからアクセスして試してみることができます。
| 関連リンク: | |
| 社内SNS「SKIP」デモサイト http://www.openskip.org/demo/ |
|
SKIPは、前述のとおり2005年に作られたものを拡張する形で作ってきました。そのため、ソースコードの多くはRailsのバージョン1.0で作られたものがほとんどです。もちろん、最新のバージョン2系で動くように対応していますが、基本部分の多くはRails 1.0ベースです。
そのため、今回のコードリーディング中で説明するコードの多くは1.0の記述になっている部分があります。あくまでも実際に動いているアプリケーションのソースコードを読むということに重きを置くということで、ご了承ください。
このように、SKIP自体はまだまだ発展途上で、改善の余地がたくさん残されています。本連載を通じて、より多くの方にSKIPのソースコードを知っていただき、修正パッチを送っていただけるようになったらうれしい限りです。

ソースコードの準備
本連載で扱うソースコードですが、SKIPはSubversionで管理されており、Webインターフェイスも公開しているので、Webブラウザからも見ることができます。
| 関連リンク: | |
| SKIPのリポジトリ http://svn.openskip.org/skip/ |
|
Webブラウザから上記URLにアクセスすると、以下の3つのディレクトリが見られます。
- branches
- tags
- trunk
trunkには最新の開発版ソースコードが管理されています。開発中のソースコードはここに入れられてコミッタ同士がソースコードの共同所有をしています。trunkのソースコードは日々変化していきますので、今回の連載で利用するには不向きです。もし、どんな機能が追加されているのか、といった最新状況に興味がある場合は、trunkで確認するとよいでしょう。
tagsには、アーカイブしてダウンロードできるようにしたソースコードが保管されています。tagsの中は公開中のものと同じものが入っているため、ソースコードが変更されることはありません。バージョン違いで公開しているソースコードの修正は、branchesの中で管理されています。従って、今回の連載で対象とするのは、ソースコードが変更されることのないtagsで管理されているものを使います。
連載中、tags以下のどのソースコードを読むのかは各回の記事中で指定します。第1回は、「1.0rc1」というバージョンを使います。このバージョンは、正式公開に向けたバージョン1.0のリリース候補版の第1弾という意味合いのものになっています。
| 関連リンク: | |
| SKIP
1.0rc1 http://svn.openskip.org/skip/tags/1.0rc1/ |
|
Subversionのクライアントを使って、上記アドレスからチェックアウトしておけば、ソースをローカルPCで読むことができ、コードリーディングには便利です。
1/3 |
| Index | |
| コードリーディングを始めよう | |
| Page1 コードリーディングとは 題材「SKIP」について ソースコードの準備 |
|
| Page2 グループ機能を見てみよう グループの一覧・検索 |
|
| Page3 グループの新規作成 グループの編集・削除 実際の動作と併せてコードを読もう |
|
| Railsコードリーディング 〜scaffoldのその先へ〜 |
| Ruby/Rails関連記事 |
| プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
| 生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
| かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
| Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
| コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- PHPでGAE上に社員検索アプリを作る (2010/3/18)
GAEの制約により使うことができなかったテンプレートエンジン。PHP4GではSmartyが使えるようになった - 構造体の便利な用途、インターフェイス入門 (2010/3/10)
継承機能を排除したインターフェイス機能でダックタイピングが可能となった。サンプルで確かめてみよう - プライベートモードの履歴状態 (2010/3/1)
仕事に集中できるときと、なかなかできないとき、ありますよね。状態遷移図で考えてみよう - Goのswitch文で解くFizzBuzzと構造体のイントロ (2010/2/25)
Goではif文と同等の制御構造をswitch文で表現できる。試してみよう
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







