2015-06-30
■ [linux] fcitx-mozcで入力が全角になる現象への対処
Ubuntu上では日本語入力にfcitx-mozcを使っているのだが、日本語モードで「Foobar」みたいに大文字から始まる単語を入力してEnterを押すと「Foobar」のように全角になってしまう現象が発生していた。
アドバイスをいただいて確認してみたところ、fcitxのプラグインで全角入力を補助するものがあることが分かった。 状態パネルの右から2番目に月のマークのアイコンがあるのだが、これが満月だとプラグインONで、三日月だとプラグインOFFらしい。
状態パネルの右から2番目にある三日月アイコンは何?
[https://wiki.ubuntulinux.jp/UbuntuTips/JapaneseEnvironment/Fcitxより引用]
ということで、三日月にすることで対処できた。
■ [ruby] RubyからSwaggerを使う方法について調べた
仕事で必要になりそうなので、Swagger (http://swagger.io/ ) をちょっと触ってみた。
SwaggerはYAMLで書かれたAPI定義をもとに、APIサーバやそのクライアントを自動生成してくれるソフトウェアである。READMEを見ると、けっこういろいろな言語に対応しているようだ。
- サーバ側:node.js, scalatra, jax-rs, spring-mvc
- Ruby対応については後述
- クライアント側:Java, Scala, C#, Perl, Python, PHP, Ruby, Android, Swift, etc.
またAPIサーバだけでなく、APIドキュメントも同時に生成してくれる (デモ http://petstore.swagger.io/ )。そのためAPIサーバを誰かに作ってもらうとき、Swaggerを使う取り決めにしておけば、必ず最低限のドキュメントが存在することが保証されるというわけ。
今回はSwaggerをRubyから使う場合(特にサーバ側をRubyで書きたい場合)にどんなライブラリがあるかを調べた。
リンク
-
http://swagger.io/ 公式サイト
-
http://editor.swagger.io/ APIのWebエディタ。左にYAMLを書くと右にプレビューが出る。 いくつかのサンプルを見ることもできる。
-
Swagger Codegen Swaggerのコードジェネレータ部分。いろんな言語に対応している。ジェネレータ本体はJavaで書かれている。 これをインストールしなくても、上のWebエディタからジェネレートすることもできるようだ。
API定義の作成
とりあえず動かすだけなら、Webエディタのサンプルを使うのが簡単。 例:http://editor.swagger.io/ を開き、File→Open Example→minimum.yamlを選択
メニューのGenerate ClientからSwagger JSONを選ぶとAPI定義をJSONで取得できる(ライブラリによってYAMLではなくJSONしか受け付けないものがある)。
クライアント側
WebエディタのメニューのGenerate ClientからRubyを選ぶと、Ruby用のクライアントコードがzipで落ちてくる。どんなものなのかは未調査。
サーバ側
最新のSwagger Codegen (2.1.0)はまだRubyサーバの生成に対応していないようなので、別の方法を探してみる。 調べた範囲では3つほどライブラリがあった。
-
- Rails用
- API定義ファイル(JSON)からAPIドキュメントを表示する部分をRails Engineとして提供してくれる
- API自体は普通にRailsでつくる
-
- チュートリアルはRails用だが、Sinatra等も使えると書いてある
- API定義をYAML/JSONではなく、独自のRuby DSLで行う (そこからJSONを生成することは可能)
- これもAPI自体は普通にRails等でつくる
-
- 参考:http://qiita.com/kazuph/items/7a63d1cf22f2c6ab509d
- APIサーバの実装にGrapeを使う予定なら良いかも
grape-swagger-uiはREADMEを見る限りではまだSwagger2に対応してなさそうだったので、残りの2つを比較する。
- swagger_engineはAPI定義をYAML/JSONで書く。Rails専用
- swagger-blocksはAPI定義をRuby DSLで書く。Rails以外も対応
ということで、Railsを使う予定であればswagger_engine、Railsが使えない or YAMLを書きたくない場合はswagger-blocksかな。