ValaでTwitterアカウントのOAuth認証

2015年9月27日 0 投稿者: khws4v1

Valaとは

Vala は GObjectを利用したC言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語である。 C#に似た構文を持ち、無名関数やシグナル、プロパティ、ジェネリクス、メモリ管理、例外処理、型推論、および、for-eachなど、C言語にはない言語仕様を持つ。

Vala – ウィキペディア
https://ja.wikipedia.org/wiki/Vala

C#との大きな違いは

  • ValaはC言語のソースを出力するので、ネイティブで動作する
  • メモリ管理がガーベジコレクションではなく参照カウント
  • C#と同等の標準ライブラリは存在せず、Glibの機能を使う
  • C言語のライブラリを簡単に利用可能

きっかけ

OSC広島2015で展示してたx68k上でTwitter動かすプログラムはValaで書いたらしい、すげえ!

GUI

GUIはGTK+使うのが1番簡単です。
Gladeで適当にデザインして、XMLファイルを出力するだけです。

vala-oauth.ui_089

UIを記述したファイルはGtkBuilderを使って読み込んでいきます。
ファイルから読み込むにはpublic uint add_from_file (string filename) throws Errorを使います。

シグナルの接続は、Gladeの方であらかじめシグナルを登録しておいてから、

範囲を選択_090

対応する関数を書きます。

Resources

UIをファイルに記述すると簡単にできるのですが、バイナリファイルとUIファイルが別々になって便利ではないのでバイナリファイルにUIファイルを突っ込んでおこうと思います。

まず、xmlファイルにリソースの一覧を書きます。

次にglib-compile-resourcesコマンドでC言語のソースを出力します。

UIをファイルからではなくリソースから読み込むので、その箇所のコードを修正します。

ちなみにUI_FILEの部分は、xmlファイルのprefixが/ui、ファイルパスがexample.uiの場合は/ui/example.uiとなります。

リソースにアクセスするときのパスですが、

というようなxmlファイルの場合は、

  • /example/file1
  • /example/ui/exapmple.ui
  • /example/icon/app.png

となります。

OAuth認証

rest-0.7使うので超簡単です。

できたコード

https://github.com/khws4v1/vala-oauth

コンパイル

CMakeを使うことで超簡単(大嘘)にコンパイルできます。
ここにCMake用のモジュールがあるのでダウンロードして使いましょう。

Vala_CMakeの準備

find_packageでvalacの有無を確認するにはCMakeLists.txtCMAKE_MODULE_PATHを追加する文を記述する必要があります。

vala_precompileを使う場合はUseValaincludeする必要があります。

リソースファイルのコンパイル

glib-compile-resourcesコマンドでxmlファイルからC言語のソースコードを出力しないといけないので、add_custom_commandで実行します。
また、find_programglib-compile-resourcesの有無も調べます。

ちなみにこんな感じ

Valaのコンパイル

vala_precompileでコンパイルします。
Vala_CMakeのREADMEに使い方が書いてあります。

vala_precompile(VALA_C
source1.vala
source2.vala
source3.vala
PACKAGES
gtk+-2.0
gio-1.0
posix
OPTIONS
–thread
CUSTOM_VAPIS
some_vapi.vapi
GENERATE_VAPI
myvapi
GENERATE_HEADER
myheader
)

こんな感じになります。

そして、add_executableでコンパイルしたC言語のソースコードを追加します。
リソースファイルから出力したソースコードもあるので、それも追加しておきます。

最終的にCmakeLists.txtはこうなります。

これでcmake . && makeでバイナリが出てくる!すごい!