質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Java

    14153questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Ruby on Rails

    7514questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • GitHub

    817questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • Redmine

    203questions

    Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

プログラマーなら一度は読んだ方がいい書籍というのはよく聞きますが、読んだ方がいいOSSのソースというのはありますか?

受付中

回答 8

投稿

  • 評価
  • クリップ 12
  • VIEW 6,716

opoonabst

score 247

書籍やネット上で情報として勉強するのも大事ですが、やっぱり実際に稼働してるソースを見るのはまた違った発見がありますよね。

WebでもアプリでもOSでもジャンルも言語もなんでもいいので、プログラマーなら一度は読んだ方がいいと思うOSSのソースがあれば教えて下さい。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 8

+8

実際に稼働してるソースを見るのはまた違った発見がありますよね。
全く同感です!
とはいえ、自分自身はまだ具体的な取り組みがほとんど進んでいないのですけれども…

ただ、プログラマーならという前提はちょっと乱暴過ぎるというか、範囲が広すぎませんか?
使用する言語や開発するアプリのタイプなどに応じてオススメは変わってくると思いますし、
また、コードリーディングのスキルによってもオススメは変わってくると思います。

それと、歴史があり有名なOSSはどれも、優秀なコミッターがソースコードの品質を厳しく管理していますけれども、
  • スキルの異なる大勢のプログラマーによって開発されている
  • 歴史の長いシステムほど、内部にレガシーなコードを引きずっている場合が多い
という事情からすると、最初から 長編の古典 に取り組むのも効率が悪いと思っています。

そこで最近思い至った、(自分のような)初心者向けの取り組み方は、(決して宣伝ではないのですけ
れども)まずは下記のような書籍やサイトを取っ掛かりにするというものです。
Code Reading―オープンソースから学ぶソフトウェア開発技法
コードリーディングを始めよう
コード リーディング

なぜかというと、これらには、コードリーディングのスキルそのものの解説が載っているのと同時に、そのスキルの説明や練習のために是非とも読みたい優れたコードの実例(全文もしくはサンプル)が添付されているからです。
これらを参照すると、Apache や Rails のソースはオススメのようですね。

自分も早く挑戦しようと思っているところ(以前に一回挫折を経験…)ですが、opoonabstさんも是非ガンバってくださいね!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+7

実際に使用するOSSで、特にご自身が作ってみたいジャンルのソフトのソースを読んでみると良いと思います。


加えて、opoonabstさんがつけられているタグを基準に挙げてみます。

Rubyなら、Ruby自体のクラスライブラリー、RailsやRedmine、それとRuby処理系自体(CRuby)。
Javaなら、Java自体のクラスライブラリー、Apacheの特にCommons辺り、それとJava処理系自体(OpenJDK)。


いきなり全部を理解する必要はありません。
まずはどういったディレクトリー構成でどういったファイルがあるのかをざっと見てみて、それから機能ごとに少しずつ掘り下げてみるとか、ランダムに選択したファイルを眺めてどういったコーディングスタイルで書かれているのかを見てみたりとか。
それでもピンと来ないと感じたら、pi-chanさんの挙げられている書籍を読んでみるのも良いでしょう。


特に処理系は難易度が高いと思いますので、慣れてきたら挑戦してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

ぼくは「作ってみたいジャンル」よりも、「これ、どうやって動いているの?」と気になるOSSがあればガンガン読んでみるのをオススメします。例えばJavaのOSSを読むと、GoFの1人Erich Gammaが「デザインパターンというのは適用するものではなく、『良いプログラマが書いたコード』は自然とデザインパターンのような構造を取ることが多い」という事を実感できるでしょう。

「これ、どうやって動いているの?」というOSSがあれば、デバッガなりログを出力するなりで、どのクラスが実行されているかアタリをつけます。その後、構造をクラス図や関数の呼び出し関係を図に落としながら読み進めると良いです。大体コードを読んでいると、「どこから呼ばれていたのか?」とかわからなくなる事が多々あります。そういう時に図を見れば、どこから呼ばれているのか一目瞭然なので、道に迷わずに済むでしょう。参考になるかはわかりませんが、僕がJenkinsのJDK自動インストール機能はどう実現されているのか、記述したメモを紹介します。(この記事に書きましたが、Jenkinsもコードに概念を定義するいわゆるドメインモデルが明確で面白いです。)

最初にどっぷり浸かったOSSはSpring Frameworkでした。当時仕事でSpringを扱っていたので、日本語で詳説されたSpring入門という本が出る前からSpringのコードを読み進めていました。出版後、自分の理解と詳説された内容を比較するのが中々面白かったです。
Springは英語ですがコメントが詳しく書かれており、例えばDependency Injectionという仕組みがどのように実現できているのか追いかけやすかったです。

JUnitなどテストライブラリのコードもリフレクションが登場する上、プロジェクトの大きさもそれほど大きくはないのでコードリーディングの素材としては手頃でしょう。ただ、Erich Gamma氏やKent Beck氏のコードが読みたいのであれば、最近は携わっていないようなので、v3.8等のコミットに戻る必要があるでしょう。SOLID原則を提唱しているUncle BobことRobert C. Martin氏のコードが読みたいのであれば、Fitnesseというプロジェクトがあります。単一責務の原則(SCP)とかどんなもんか垣間見る事ができるでしょう。 

ところで最近はGitHubやBitBucketを介し、Gitリポジトリで公開されているので、最新版のソースコードだけでなく、「最初のコミットがどんなコミットだったか」が簡単に見られます。最新版のソースコードは育ちきっているのでどこから追いかけたらいいのか難しい面があるでしょう。そういう時は、プロジェクトが小さいうちのコードを読んでみるといろいろと示唆が得られるのでオススメです。コミットのコメントやその粒度も重要な情報です。

最後に、コードリーディングの初心者には、Rubyのような動的言語のライブラリはあまりオススメできません。なぜならRailsのように存在しないメソッドが呼ばれた時の処理まで実装されているなど、動的言語だとコードを読み進める上で想定しないといけない事が多いからです。慣れてきたら挑戦してみると良いと思います。

ということで、レッツコードリーディング!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

実際に使用するOSSで、特にご自身が作ってみたいジャンルのソフトのソースを読んでみると良いと思います。
私も、そう思います。ま、私の場合は、必要に迫られて読んでいたといった方が良いかもしれませんが。。。
仕事で利用していた、apache, bind など脆弱性が発表されるたびに覗きに行っていました。。。

githubにアカウントを作ってコレいいなと思ったらforkしてみては如何でしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

他の方の意見には概ね賛成です。

他には、OSSのフレームワークのソースコードなんかは、その言語やフレームワーク自体を理解するのに非常に役立ちますので、出来るだけ読むようにしています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

とある勉強会の懇親会で、
自称プロの酔っぱらいの方に
「Gitのソースコードは読んだ方がいいよ!」
と言われたことがあります。

https://github.com/git/git

gitのコードがgitで管理されててちょっと「????」
ってなりますw

この質問を見て思い出したので、
私もこれから読みます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

少し違うかもしれませんが、C++のSTLは勉強になりました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

もしどのような言語でもいいから、ということであれば、

jQuery

のソースをおすすめします。

jsやDOM周りには、ちょっと扱うだけではお目にかかることのないような機能をややり方がたくさんあり、
そういったギミックをjsのライブラリは多量に使用しています。

中でもjQueryはその役割がはっきりしています。

また、jQueryのソースは単一であり、ファイルの中から飛び出すことはなく、すべてはその中で完結しています。

なので、とりあえず「わからなくてもいいや」という部分はあるはずがないという前提があります。

わからない部分があれば、それは自分自身がわかっていないやり方である、と断言できるわけです。

ならばそれを学ぶきっかけになり、非常に割り切りやすいのです。

また、読みやすいdeveloper用のソースも共有されています。

jQueryのソースを読むことで、

ソースコードリーディングの楽しさと実用性

が身にしみてわかると思います。

jQueryのソースが理解できるならば、jsの理解がかなり深まっていると思って、過言ではないわけですから。

その経験を踏み台にして、他のライブラリや、処理系に進んでいくのが、スムーズではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    コーディングについて

    仕事でプログラマ兼雑用をしております。 事務職志望だったのがなぜかシステム開発部に異動となり、 知識が全く無いため、色々とご教示頂きたいと思っております。 ①綺麗なコードの定義と

  • 解決済

    JAVAの勉強になるコードを教えて下さい

    現在、JAVA独学中です。文法書でだいたい、ザクッとは分かりましたが、書籍だけで勉強していても仕方がないという事に気が付き始め、コードリーディングをして勉強したいと思っています。グ

  • 解決済

    今後プログラマはAIに代替されていくのか

    こんにちは。 今私はさまざまな言語を勉強し、習得に励んでいるのですが、 今後AIなどの発達で、プログラマは不要になっていくのでしょうか?

  • 解決済

    C言語のライブラリについて

    C言語のライブラリは標準ライブラリ一覧以外にもあるのでしょうか?

  • 受付中

    Windows以外OSでのグローバルフック相当機能について教えてください

    Windowsにはグローバルフックという仕組みがあります グローバルフックを使ってみた http://fa11enprince.hatenablog.com/entry/2

  • 解決済

    C++における全角文字の処理について

    1行毎に単語の並んだテキストファイル(utf-8)を読み込み、vectorに格納を行おうとしているのですが、全角文字を扱う際に思うように動作しません。 各行の単語をwordに保持し

  • 解決済

    Javascript シンタックスと行番号

    ブラウザ上でhtml/cssを入力できるサイトを作っています。 ACEなどを使わず、フルスクラッチでtextareaに行番号を表示したいと考えているのですが、Javascript等

  • 受付中

    Bitbucketでタスク管理するならgitも必要?

    勉強の為に引用しました。 https://qiita.com/Mitsunori_Tsukada/items/e02df66b115568405d65 タイトル gitによるB

同じタグがついた質問を見る

  • Java

    14153questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Ruby on Rails

    7514questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • GitHub

    817questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • Redmine

    203questions

    Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が可能な、 オープンソースプロジェクト管理ソフトウェアです。

  • トップ
  • Javaに関する質問
  • プログラマーなら一度は読んだ方がいい書籍というのはよく聞きますが、読んだ方がいいOSSのソースというのはありますか?