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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

GitHub

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

Ruby on Rails

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

Redmine

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

Q&A

8回答

14367閲覧

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

opoonabst

総合スコア264

Java

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

GitHub

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

Ruby on Rails

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

Redmine

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

2グッド

13クリップ

投稿2015/09/10 12:03

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

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

stereo_code, matobaa👍を押しています

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答8

0

実際に稼働してるソースを見るのはまた違った発見がありますよね。

全く同感です!
とはいえ、自分自身はまだ具体的な取り組みがほとんど進んでいないのですけれども…

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

それと、歴史があり有名なOSSはどれも、優秀なコミッターがソースコードの品質を厳しく管理していますけれども、

  • スキルの異なる大勢のプログラマーによって開発されている
  • 歴史の長いシステムほど、内部にレガシーなコードを引きずっている場合が多い

という事情からすると、最初から 長編の古典 に取り組むのも効率が悪いと思っています。

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

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

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

投稿2015/09/10 20:05

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

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

投稿2015/09/10 21:45

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ぼくは「作ってみたいジャンル」よりも、「これ、どうやって動いているの?」と気になる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のように存在しないメソッドが呼ばれた時の処理まで実装されているなど、動的言語だとコードを読み進める上で想定しないといけない事が多いからです。慣れてきたら挑戦してみると良いと思います。

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

投稿2015/09/14 13:35

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

私も、そう思います。ま、私の場合は、必要に迫られて読んでいたといった方が良いかもしれませんが。。。
仕事で利用していた、apache, bind など脆弱性が発表されるたびに覗きに行っていました。。。

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

投稿2015/09/10 22:04

Ken.sakanakana

総合スコア1768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

jQuery

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

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

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

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

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

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

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

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

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

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

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

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

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

投稿2016/06/06 03:16

sokha

総合スコア216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2016/05/28 13:33

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

https://github.com/git/git

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

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

投稿2015/09/15 13:05

yu1ro

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/09/15 05:10

k.tada

総合スコア1679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問