2016年9月28日
GitHubのコード検索 : プログラマにとっての宝の山
(2016-08-26)by Jakub Dziworski
本記事は、原著者の許諾のもとに翻訳・掲載しております。
新しい言語やフレームワークを学ぶことは、時には苦闘になることがあります。従来のアプローチは、概念を説明し簡単な例を提供するドキュメントを読むことです。それで十分な場合もありますが、ドキュメントに高度な例や実際のプロジェクトでの使い方が書かれていない場合も多々あります。
ドキュメントに記載されていない問題に出くわすと、大抵の人はStack Overflowで解決策を探します(またはソースコードを丹念に調べます)。しかし、「使っているフレームワークが登場してから十分に期間が経っておらず、思い浮かぶ質問全てにStack Overflowが答えてくれない」ということもありえます。
今まで問題にはまって、こう考えたことはありませんか?
「誰かが既にこの問題を解決しているはずだ!では、なぜこの問題に対する答えがStack Overflowにないのだろうか?」
そのとおりです。恐らく誰かは既にそれを解決しています。そして、その解決策はGitHubにアップされている可能性が大いにあります。なので、それを見つければいいだけなのです。プログラマは、インターネット上で知らない人に問題を質問するより、自分で解決する可能性が高いからです。
GitHubのコード検索
GitHubの検索 では、さまざまな方法でリポジトリを検索する方法を提供しています。その一つは、 コードの検索 です。これは非常に強力な機能です。今までに誰かが書いたどのコード行でも、簡単なクエリで見つけることができます。GitHubの”良い”ところは、プライベートリポジトリが無料ではないということです。従って、ただ自分のコードをバックアップしたいだけのユーザが暗黙的に一般に公開しているプロジェクトがたくさんあります。これは情報の宝庫です!
例
次に、GitHubの検索コードが便利だと分かる例を幾つか紹介します。
新しいAPIを学ぶ
今までに、サードパーティのAPIを使用して問題にぶち当たり、自分のケースと似たようなコードスニペットを見つけることができなかったことはありませんか?
私は最近、巨大なファイルを読み取り、瞬時に別のファイルに結果を渡すために Akka Streams を使用する必要がありました。この件に関する ドキュメント は役に立ちますが、短いので、もっと例を提供しほしいです。
そこで助けになるのが、GitHubの高度な検索です。数回のクリックで、CSVファイルの読み取り・変更・別のファイルへのダンプを行う素晴らしいコードが見つかりました。
興味のある技術を使っているプロジェクトを見つける
Spring MVC や Hibernate 、もしくは Spock を用いたテストについて学びたいとしましょう。それぞれのライブラリのドキュメントを読み、1つずつ学ぶこともできるでしょう。もしくは、学びたい内容の全てを統合したプロジェクトを見つけられるかもしれません。
ほとんどのプラットフォームに、ある種の依存関係管理ツールが備わっています。 Java の場合は普通 Maven が使われますが、これは全ての依存性の情報を pom.xml
ファイルの中に保存します。
そのため、興味のあるプロジェクトを探すために、キーワードやファイル名をクエリすることが可能です。
spring hibernate spock filename:pom.xml
このメソッドは、貢献できるプロジェクトを探す際も非常に役立ちます。
外部サービスとのインテグレーション
自分が好む言語を使ってGitHub APIとインテグレーションする迅速な方法をお探しですか?心配無用です。APIのURLと言語によるフィルタを使ってリポジトリを検索するだけで見つけることができます。
api.github.com language:scala
コンフィギュレーション
実在する大プロジェクトのコンフィギュレーションファイルを見てみるのもいいでしょう。これは非常に有益で、特に未成熟なフレームワークの場合に役立つと思われます。
それでは、Akkaのクラスタを設定する方法を見てみましょう。このようなコンフィギュレーションには ClusterActorRefProvider
というキーワードが含まれ、 .conf
という拡張子の付いたファイル(通常は application.conf
)になっています。
ClusterActorRefProvider extension:conf
まとめ
GitHubの検索は過小評価されていますが、新しいAPIを学んだり、問題を解決したり、興味のあるリポジトリを探したりするためには、非常に強力なツールです。これは新しいフレームワークを迅速に使い始めることができるすばらしい方法です。達成したい内容に似ているコードスニペットを探すのは、いつだって難しいからです。また、あなたが直面している問題を抱えているのは、自分一人じゃないと思うこともできます。既に他の誰かがその問題を解決しているということはよくあります。同じように、興味のあるプロジェクト見つけるのも、GitHubの検索エンジンを使えばたった数分で済んでしまいます。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa