2018年6月13日水曜日

swagger-codegen を試してみた

概要

swagger-codegen は 1 つの swagger ファイルから複数の言語のクライアントツールを生成することができるツールです
コマンドラインと と docker で使えるので試してみました
今回は Ruby のコードを生成します

環境

  • macOS 10.13.5
  • docker 18.03.1-ce

docker で生成する

docker run --rm -v $(pwd):/local swaggerapi/swagger-codegen-cli generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o /local/out/ruby
  • ls -1 out/ruby/
Gemfile
README.md
Rakefile
docs
git_push.sh
lib
spec
swagger_client.gemspec

こんな感じで生成されました

homebrew でバイナリをインストールして生成

Mac であれば homebrew で swagger-codegen コマンドをインストールして使うことができます
ただし Java のインストールも必要です

  • brew cask install java
  • brew install swagger-codegen

Java8 が必要だと言われて怒られた場合は

  • brew cask install homebrew/cask-versions/java8

を実行してください

これで swagger-codegen というコマンドがローカルで使えるようになります
先程の docker も内部で同じコマンドを実行しています

生成するコマンドを実行してみます

swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l ruby -o ./out/ruby

ほぼ同じです
パスの部分が若干違うだけです
生成されるファイルは全く同じなので割愛します

と思ったのですが docker と homebrew だと swagger-codegen のバージョンが異なるようです
また生成されるファイルも若干違っていました
docker 版には .rubocup.yml がありましたが、homebrew 側にはありませんでした
docker 側は 2.4.0-SNAPSHOT で homebrew が 2.3.1 なので docker 側の最新イメージには開発中の最新版が入っているようです

サーバ側のコードを生成する

上記のコマンドはクライアント側のツールを生成するだけです
とりあえずリクエストを投げてみたいのでサーバ側のコードも生成してみましょう
Ruby の場合 Rails5 or Sinatra が選択できるようです
個人的に Sinatra のほうが好きなので Sinatra を選択します

docker run --rm -v $(pwd):/local swaggerapi/swagger-codegen-cli generate -i http://petstore.swagger.io/v2/swagger.json -l sinatra -o /local/out/ruby_server

当然ですが swagger.json は同じものを指定してください
docker を使っていますが、ローカルでコールする場合もほぼ同じです

生成されるファイルは以下の通りです

  • ls -1
Gemfile
README.md
api
config.ru
lib
my_app.rb
swagger.yaml

使ってみる

このままでは絵に書いた餅です
実際に使ってみます
今回は docker で生成したコードを使います

サーバを立てる

先ほど生成したサーバ用のコードを使います
とりあえず Gemfile があるのでなすがままに bundle install してみましょう

  • bundle install --path vendor

いろいろとインストールされます
config.ru があるので、それを使って起動してみます

  • bundle exec rackup config.ru

これで localhost:9292 で起動します
もしバインドする IP を指定したい場合は -o 0.0.0.0 という感じで指定できます

クライアントからコールしてみる

サーバが起動したのでクライアントツールを使ってコールしてみます
こちらも Gemfile があるのでとりあえず bundle install しましょう

  • bundle install --path vendor

こちらもいろいろインストールされます
作成されたファイルを見ると swagger_client.gemspecRakefile があるのでどうやら専用の gem が作成できそうです

とりあえずそのまま作成してみましょう (ただ bundler/gem_tasks を使っていないので rake build することはできません)

  • bundle exec gem build swagger_client.gemspec

これで swagger_client-1.0.0.gem という gem ができあがります
あとはインストールして使いましょう

  • gem install swagger_client-1.0.0.gem

ethontyphoeus に依存していました
HTTP クライアントとして使っているので内部では libcurl を使っているっぽいです

サンプルコード

ではサーバ側のコードをコールしてみましょう
コール先は localhost:9292 なので SwaggerClient.configure で変更します
と言ってもサーバ側で何も実装していないので何も返ってきません

  • vim sample.rb
require 'swagger_client'

SwaggerClient.configure do |config|
  config.host = 'localhost:9292'
end

api_instance = SwaggerClient::PetApi.new
status = ['sample_status']

begin
  p api_instance.find_pets_by_status status
rescue SwaggerClient::ApiError => e
  puts "Exception when calling PetApi->add_pet: #{e}"
end

こんな感じでクライアントからコールすることができます
クライアント側のコードに README.md が出来ておりリファレンスも生成されているのでそれを参考にすると良いと思います

ちなみに localhost:9292/swagger.yml で定義ファイルを確認できます

最後に

swagger-codegen を使って Ruby のコードを生成し試してみました
正直まだまだ絶賛開発中な感じはします

また生成したコード (特にサーバ側) は本当に簡単なものだけなので、実際にサービス化するときはコーディングが必要になります

なので、生成されるコードをしっかりと読み解く時間も必要になるのは注意が必要です

参考サイト

2018年6月12日火曜日

TwitterKit を使って Twitter のログインページを作ってみた

概要

TwitterKit は Twitter が公式で提供している Swift 用の SDK です
今回は SpriteKit プロジェクトで TwitterKit を使ってみました
簡単なログイン画面を実装してみます

環境

  • macOS 10.13.5
  • Xcode Version 9.4 (9F1027a)
  • twitter-kit 3.3.0

事前準備

Twitter のアプリ作成画面からアプリを作成しておきましょう
作成後以下を確認してください

  • Consumer Key と Consumer Secret Key の取得
  • Callback URL の設定
  • Read, Write の設定

Consumer Key と Consumer Secret Key はアプリを作成すると取得できるのでアプリを作成すれば OK です
Callback URL は以下の画像にあるように twitterkit- から始まるアドレスを設定しましょう
こうすることでアプリで認証後に再度アプリの画面に戻ることができます
Read, Write の設定は Permissions タグから行うことができます

最終的に Details タブで確認して以下のようになっていれば OK です
twitterkit1.png

ライブラリインストール

  • pod init
  • vim Podfile
pod 'TwitterKit'
  • pod install

で作成された .xcworkspace のプロジェクトを Xcode で開きます

AppDelegate.swift の編集

まず didFinishLaunchingWithOptions で Consumer Key を登録します

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    TWTRTwitter.sharedInstance().start(withConsumerKey: "isQRxxxxxxxxxxxxxxxxxxxxx", consumerSecret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
    return true
}

Info.plist の編集

次に Info.plist を編集して先程アプリに設定したコールバック URL をこちらにも登録します
これを登録しないとコールバック URL がおかしいと言われてエラーが発生します
直接 XML を編集したほうが簡単なので Info.plist を選択した状態で

Open As -> Source Code

で開いて以下を貼り付けましょう

<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>twitterkit-isQRxxxxxxxxxxxxxxxxxxxxx</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>twitter</string>
    <string>twitterauth</string>
</array>

GameViewController.swift の編集

ログイン用のボタンを設置しましょう
viewDidLoad の先頭に以下を追記しましょう

override func viewDidLoad() {
    super.viewDidLoad()
    let logInButton = TWTRLogInButton(logInCompletion: { session, error in
        if let s = session {
            print("signed in as \(s.userName)");
        }
        if let e = error {
            print("error: \(e.localizedDescription)");
        }
    })
    logInButton.center = self.view.center
    self.view.addSubview(logInButton)
    // ...
}

... の部分は元々ある SKScene をロードするコードを書いておきます
TWTRLogInButton を作成して addSubview で GameViewController のど真ん中にボタンを配置しています
とりあえず今回はログイン後に何もせずデバッグのメッセージを表示します

あと最後に GameScene.sks ファイルの Hello World のラベルを削除すれば OK です

動作確認

アプリを起動して動作確認しましょう
ログインボタンを押すとログイン用の View が出てくるのでログインしましょう
twitterkit2.gif

コンソールを確認して以下のようにログイン OK のメッセージが出ていれば OK です

signed in as hawksnowlog

最後に

TwitterKit を使ってログイン画面を実装してみました
あとはログイン後の処理をデバッグ画面の表示ではなく画面遷移などに変更すれば OK だと思います
そしてツイートを取得したりツイートする処理を実装すればそれっぽい Twitter クライアントができると思います

参考サイト

2018年6月10日日曜日

ownCloud を docker で動かそう

概要

ownCloud は GoogleDrive や Dropbox といったクラウドストレージを簡単に構築できるサービスです
docker のイメージが公開されているのでコマンド一発で構築できます

環境

  • macOS 10.13.5
  • docker 18.03.1-ce

ownCloud を起動

  • docker run -d -p 80:80 owncloud:8.1

これだけで OK です

とりあえず動作確認

localhost にブラウザでアクセスしましょう
管理者用のアカウントを作成します
owncloud1.png

デフォルトでいくつかファイルがあるので不要であれば削除しましょう
あとはアップロードすれば普通に使えます
owncloud2.png

データを永続化する

このままだとコンテナを削除したらアップロードしたファイルがなくなります
テンポラリとして使うのであれば問題ないですが過去にアップロードしたファイルを確認したいときには永続化する必要があります
やり方は簡単で -v オプションでホスト側のストレージをマウントしてあげるだけです

  • docker run -d -p 80:80 -v $(pwd):/var/www/html owncloud:8.1

これでコンテナを削除してもファイルは削除されません
管理者用のユーザ/パスワードも引き継がれるので忘れないようにしましょう

Tips

ファイルを wget する際には以下のコマンドを投げます
セキュリティの観点で直リンクは使えないようになっています

wget \
--header="Host: localhost" \
--header="User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" \
--header="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" \
--header="Accept-Language: ja,en-US;q=0.9,en;q=0.8" \
--header="Cookie: _ga=GA1.2.273664293.1526454426; _gid=GA1.2.285044917.1528161957; ocztnxtfknvn=93abc983e77160bfbd5385e5a084f7b8" \
--header="Connection: keep-alive" \
"http://localhost/index.php/apps/files/ajax/download.php?dir=%2F&files=hoge.txt" \
-O "hoge.txt" -c

このコマンドは chrome の CurlWget という拡張を使って作成しています

最後に

ownCloud の使い方を紹介しました
個人的には別のサーバとファイルを交換するときに役に立つかと思います
自宅に 1 台これがあれば複数のマシンおよびデバイスでファイルのやり取りができるようになるので便利かなと思います

参考サイト

2018年6月8日金曜日

nginx for windows で簡単ファイルホスティング

概要

Windows から別のマシンにファイルを送るのが非常に面倒です
そんな場合に nginx を立ててファイルを配布すると簡単です

環境

  • Windows7 64bit HomeEdition
  • nginx for Windows 1.15.0

インストール

ここから最新版の zip ファイルをダウンロードしましょう
執筆時点では「nginx-1.15.0.zip」というファイルが最新版でした
ダウンロードしたら解凍して適当なフォルダに配置してください

基本はこれだけで OK です
いらなくなったらフォルダごと捨ててください

サーバを起動する

コマンドプロンプトを立ち上げましょう
あとは配置したディレクトリに移動して start するだけです

  • cd nginx-1.15.0
  • start nginx.exe
  • tasklist /fi "imagename eq nginx.exe"

tasklist コマンドでプロセスが起動しているか確認できます

ファイルをホスティングする

ドキュメントルートに配置してみましょう
デフォルトだと配置した nginx-1.15.0 配下の html というディレクトリが root になっています
ここに適当にテキスト (hoge.txt) を配置してください
nginx_win1.jpg

あとはブラウザで localhost/hoge.txt にアクセスするとファイルが表示できると思います
Mac などからダウンロードしたい場合は wget コマンドを使っても良いと思います

停止する

  • nginx.exe -s stop

で OK です

最後に

Windows で nginx を動かしてみました
Windows で生成したファイルをほかで共有したい場合に一時的に nginx を起動するだけで簡単に共有できるかなと思います

Mac と Windows, Linux と Windows でファイルを共有する場合にはいろいろな方法がありますがファイル共有機能などを使うといろいろと躓くポイントが多いのでとりあえずってことであればこの方法をお勧めします

参考サイト

2018年6月7日木曜日

フリーで使える Cakewalk を Windows にインストールしてみた

概要

SONAR と呼ばれる DAW (Desktop Audio Workspace) が Cakewalk by Bandlab としてフリーで使えるようになりました
使うまでが結構面倒だったので簡単に手順をまとめました

環境

  • Windows7 64bit HomeEdition
  • Cakewalk 2018.05 (build 19, 64bit)

BandLab のアカウントを作成

まずはここからアカウントを作成しましょう
calkwalk1.jpg

メールアドレスを使ってサインアップすれば OK です
確認のメールが来るのでメールをチェックしてアカウントをアクティベートします
calkwalk3.jpg

ログイン後に「作成する」を選択すると Bandlab の Web 版を使うこともできます
これは Cakewalk ではないのでご注意を
また Chrome でないと動作しないので使う場合は Chrome にしてください
calkwak4.jpg

BandLab Assistant アプリのインストール

理由はさっぱりわかりませんが BandLab Assistant というランチャーアプリをインストールしないと Cakewalk にはたどり着けません
ダウンロードはここから行います
calkwalk5.jpg

ここから Download を選択すると exe をダウンロードできるリンクに移動するのでダウンロードします
bandlab-assistant-windows-latest.exe というインストーラがダウンロードできれば OK です
あとは exe を実行してインストールすれば OK です

インストールが完了すると以下のようなランチャーが起動します
その前におそらくログイン画面が出るので先ほど作成した Bandlab のアカウントを使ってログインしましょう
calkwalk6.jpg

実はここから先ほどの Web 版を起動することも可能です
またアカウントの作成もこのランチャーを使ってできるので先にランチャーをインストールしても OK です

Cakewalk by BandLab アプリのインストール

Apps タブを開きましょう
すると Cakewalk のダウンロードボタンがあるので選択します
cakewalk7.jpg
※すでにダウンロードした後なのでボタンが Open になっています

すると目的の Cakewalk のダウンロードが始まります
結構時間がかかるので待ちます
ダウンロードが完了するとインストーラが自動的に起動してインストールが始まります
特につまづくことはないと思うのでポチポチ進めてください

これで Cakewalk のインストールが完了です

動作確認

先ほどのランチャーからでも良いですし、すべてのプログラムからでも Cakewalk を起動できます
あとは好きなように使えば OK です
enter image description here

最後に

Cakewalk by Bandlab を Windows にインストールしてみました
アカウントの取得が必要ですが、それをクリアするだけでフリーで使えるのは素晴らしいと思います

ちゃんと公式サイトを使ってインストールすることをお勧めします
Windows はノラアプリがいたるところで配布されているので間違って別のものをインストールしないように注意してください

2018年6月2日土曜日

itamae を使って docker イメージを作成してみた

概要

itamae は Ruby で作られたプロビジョニングツールです
docker イメージも作成できるということなので試してみました

環境

  • macOS 10.13.4
  • Ruby 2.5.1p57
  • itamae 1.9.11
  • docker 18.03.1-ce

itamae のインストール

今回は bundler を使っていますが、グローバルにインストールして良いと思います

  • bundle init
  • vim Gemfile
gem "itamae"
  • bundle install --path vendor

プロジェクトの作成

公式の wiki にあるようにディレクトリ構成を作成します
専用のコマンドも用意されているようなのでそれを使って構築します
もちろん今回の方法じゃなくても OK です

  • bundle exec itamae init test
      create  
      create  Gemfile
      create  cookbooks/.keep
      create  roles/.keep
         run  bundle install from "."

test という名前のプロジェクトを作成します
今回は docker イメージを作成するので gem を追加します

  • vim Gemfile
gem 'docker-api'

この配下に role と cookbook を作成します

role の作成

role はサーバの役割ごとに作成します
例えば Web サーバ、DB サーバに対してレシピを作成する場合は web, db などといった role を作成します
今回はテストサーバなので test_server という role を作成します

  • cd test
  • bundle install --path vendor
  • bundle exec itamae generate role test_server
      create  
      create  default.rb
      create  files/.keep
      create  templates/.keep

こんな感じで作成されます
あとで cookbook を作成するのでその cookbook を参照するように role のレシピに記載します

  • vim roles/test_server/default.rb
include_recipe '../../cookbooks/vim'

相対パスで cookbook ディレクトリの場所を指定します
vim cookbook はこの後作成します

cookbook の作成

上述の通り vim をインストールする cookbook を作成しましょう
この cookbook が実際にプロビジョニングする内容を記載するレシピになります

  • bundle exec itamae generate cookbook vim

今度は cookbook を generate します

      create  
      create  default.rb
      create  files/.keep
      create  templates/.keep

作成されたらレシピを記載します

  • vim cookbooks/vim/default.rb
execute 'update apt' do
        command 'apt -y update'
end

package 'vim' do
        options '--force-yes'
end

やっていることは簡単で apt update した後で vim をインストールしています
ではこれを使って docker イメージを作成してみましょう

docker イメージの作成

itame は作成したレシピを使って docker イメージを作成することが可能です
他にも localhost に適用したり SSH を使ってリモートホストに実行することも可能です

  • bundle exec itamae docker --image=nginx --tag nginx_with_vim roles/test_server/default.rb

実行すると nginx イメージの pull が始まりその後プロビジョニングが始まります

 INFO : Starting Itamae...
 INFO : Recipe: /Users/hawk/Documents/work/itamae/test/roles/test_server/default.rb
 INFO :   Recipe: /Users/hawk/Documents/work/itamae/test/cookbooks/vim/default.rb
 INFO :     execute[update apt] executed will change from 'false' to 'true'
 INFO :     package[vim] installed will change from 'false' to 'true'
 INFO : Image created: sha256:58b463f0c5730e230e5d6124c6b3112bdf5a3c0cf1347c629038f0af9d7c9c62

こんな感じでログが表示されれば成功です
細かいヘルプは bundle exec itamae help docker で確認できます

動作確認

docker images で nginx_with_vim というイメージが作成されていることを確認します
そして run で動作確認してみましょう

  • docker run --rm nginx_with_vim vim --version

これで vim のバージョン情報が表示されると思います

最後に

itame を使ってレシピを作成して、そこから docker イメージを作成してみました
今回は docker イメージを作成しましたが、作成したレシピは普通の Ubuntu サーバなどに対しても実行可能です

Ansible に比べて情報は少ないですが、簡単に使えると思います

参考サイト