初めに
こんばんは。G&Tと申します。いつもはサークルでゲーム制作などを行っていますが、今回はオープンソースソフトウェアの開発に参画してみました。オープンソースソフトウェアに関しては以前から興味を持っており、GitHubのアカウントを作ったりして見たものの、参加の作法等が分からず貢献したいプロジェクトもあまり見つからずそのまま放置していたのですが、今回とあるセミナーのようなものでオープンソースソフトウェアの開発について一から教えていただけるということで実際に参加して習ってきたところであります。ちなみに本記事はセミナーの最終報告書を兼ねています。
OpenTweenとは
OpenTweenとはWindowsのPC向けTwitterクライアントです。古くからあるTweenというTwitterクライアントが元となっており、オープンソースソフトウェアだったTweenがクローズドソース化(そんな単語あるのか?)して広告が表示されるようになったりしたことですったもんだあった際に、オープンソースとしての開発を継続するとして枝分かれしたプロジェクトがOpenTweenです。よって現在では本家TweenとオープンソースのOpenTweenの二種類のTweenが存在しています。正直使う側からすればどっちもほぼ変わらんので使いたい方は好きな方をお使いください。プロジェクトの場所は以下の通り。
SourceForge:https://ja.osdn.net/projects/opentween/
GitHubリポジトリ:https://github.com/opentween/OpenTween
ソースコードとしては(たぶん)両方とも同じものがあります。単に使いたいだけの場合は上の方のサイトからzipでダウンロードできます。
開発言語はC#というかVisual C#で、ソースコードにはVisual Studioのソリューションプロジェクトがそのまま入っています。
C#とは
C#はMicrosoftがC言語やC++をもとに開発した.NET Framework用のプログラミング言語です。筆者はOpenTweenのソースコードをダウンロードした時点でCとC++(の触りの部分)しかわからないかったのですが、そんな状態でもとりあえずなんとなくソースコードの内容を解析することができました。そういう感じの言語です。また、Microsoft製の総合開発環境「Visual Studio」シリーズによるC#のコーディングでは、作成するソフトウェアのウィンドウのレイアウトや右クリック時の挙動などGUIに関わる部分をデザイナーツール(デザインツールなど表記の揺れがある模様)でGUI的に編集することができることも特徴の一つです。
よりちゃんとした説明をお求めの方はこちらをご覧ください。
OpenTween解析結果
OpenTweenのソースコードの中身に関する解析結果です。見ていった順番に記述して分析方法を併記しようかとも思いましたが、量が多く可読性が悪くなってしまうためソースファイルごとのまとめの形式で記述することにします。追跡の過程に関しましては機能追加に関する記事をご覧ください。ファイル名の後ろに[デザイン]と書かれているものはVisual StudioのデザイナーツールによるGUI編集が可能なソースファイルです。
なお、以下に記載されているのは実際に機能を追加するにあたって重要となった一部のソースファイルのみです。これ以外のファイルに関しましては次項「解析の方法」を参考にご自身で解析いただけると幸いです。
ApplicationEvents.cs
- Main関数がある
- 以上
Tween.cs[デザイン]
TweenMainクラスがあり、基本的な処理が記述されています。以下のメソッドはその一例です。- TweenMain_Load:起動時の一連の処理
- PostButton_Click:ツイート投稿時に呼ばれる処理
- QuoteStripMenuItem_Click:右クリックのQuoteボタンが押されたときに呼ばれる処理(GUIで設定可能)
TweetDetailView.cs
個々のツイートに対する各種処理を行っていると思われる部分です。- PostBrowser_Navigating:一覧表示のツイートを選択した際に呼ばれるメソッド
- PostBrowser_Navigated:一覧表示のツイートを選択した際に呼ばれるメソッド
- ShowPostDetails:ツイート選択時に呼ばれ、この処理後に詳細閲覧が行われる
FilterDialog.cs[デザイン]
タブの振り分けルール画面に相当する部分です。完全にインターフェースのみを決定している部分であり、PostFilterRule.csで書かれている処理をGUIで呼び出す用です。GUIのフォームでほぼ表され尽くしているのでソースコード読解として特筆すべき点はありません。PostFilterRule.cs
Models下にあるファイルです。タブの振り分けルールに関するデータを保持し実際に処理を行っているPostFilterRuleクラスを持っています。振り分けルールはbool型変数のフラグや、除外単語文字列のstring型などで保持しています。なお、このファイルのフィルタ作成メソッド周りは完全には分析できていません。- Compile:何らかの整理を行っているが詳細は不明
- MakeFiltersExpr:長い引数で指定された条件をExpression型に変換している
- MakeGenericFilter:MakeFiltersExprから何度か呼ばれており、より汎用的なExpression型変換を行っている部分であると考えられる
- MakeGenericFilter:MakeFiltersExprから何度か呼ばれており、より汎用的なExpression型変換を行っている部分であると考えられる
- ExecFilter:Expression型のデータを用いて実際にツイートの振り分けを行っている部分。
Tween.resx
ソフトウェアのデザインがXMLファイルで記述されています。基本的にはGUIで作成したデザインに対応するXMLファイルが自動で書き込まれるのみであり、変更の必要はありません。しかし、デザイン周りの概要を眺める際には読むと便利な場合があります。解析の方法
ソースコードの解析には主に以下の二つの方法を用いました。1. Ctrl + Shift + F
Visual Studioのプロジェクト内文字列全検索コマンドです。一つのファイルの中で文字列を検索したい場合はCtrl + Fのみ。Visual Studioは統合開発環境なので、検索をはじめとしたソースコード間の連携機能が非常に優れています。ソースコードがタブで簡単に切り替え可能だったり、長い部分を折りたたんで整理することができたり、ソリューションエクスプローラーでソースコードを開かずにクラス名・メソッド(関数)名だけ閲覧したり。さらに、クラスやメソッドを使用している部分にマウスカーソルを載せると、そのクラスやメソッドを定義している場所に書かれたコメントが表示されたりもします。検索機能とこれらの機能を組み合わせることで効率的にソースコードの読解が可能です。
検索自体は、関係のありそうな単語で全体検索をかけます。RT関連だったら「RT」「Retweet」など。さらにOpenTweenは日本語でコメントが書かれているのでコメント狙いで日本語検索をすることも可能です。目当てのクラスやメソッドが見つかったら上から順に読んでいくと良いでしょう。その際にマウスカーソルを合わせてコメントを表示させる機能が威力を発揮します。
2. デバッガ
Visual Studioにはデバッガが付属しているので、それを使ってどのコードが実際に何を行っているのかを分析することが可能です。F9でブレークポイントを設定しF10でステップ実行ができます。例えばツイートを行っている部分を特定したい場合にPostTweet何とかみたいな関数を見つけたとしたら、そこにブレークポイントを設定して実行時にツイートボタンを押したときに止まったとしたら実際にそこがツイートを行っている場所、ということになります。Visual Studioは強力なソースコードの連携機能がついていますし、OpenTweenは日本語で割と詳しくコメントが書いてあるので、上記の二つの方法を取るだけでもかなりスムーズに読解ができると思われます。そこから先が読めるかどうかはプログラミングの知識に依るところになりますが。