2016/12/31

2016年 大晦日

Blog

更新頻度は高くないけど、ぼちぼちと技術情報をアップしているStackeditを使うようになったからかも。

カメラ

Sony A99II が販売されたのはいい励みになった。
高いけど。高すぎるけど。もう少し安いフルサイズα出してくれないかな。
祭用に外付けフラッシュを買ったのと、その効果に満足!屋内撮影時にも活躍してくれる。来年は財布と相談しつつ、中古でフルサイズαを狙えたらいいなぁ。

読書

全然。やばい。もう少しなんか読もう。
なろうのリゼロは全部読んだ。二回読んだ。

プログラミング

今年5月にPHPデビュー。そのままの勢いで年末までPHPメインで仕事。
そしてそのままの勢いで来年もPHP野郎になってしまう予定。
いっそ行き切るところまで行ってしまう予定。

地元交友関係

ついに地元の神輿会に入ってしまった。
Tシャツゲット。

勉強会

最近忙しさや心の余裕がなかったりで、あまり出れてない。
来年はもう少し出ていこうと思う。

SNS

Twitter, instagram, facebook をぼちぼちと

アニメ

NETFLIXのおかげで過去作品を結構見始めた。
今年のベストはリゼロかな。

Game

今年クリアしたゲームはWiiUのトワイライトプリンセス、現在はベヨネッタをプレイ中。年を通してHearth Stoneも継続中。ゴマ乙にも手を出したおかげで脳内に弾幕シューティング系の回路構築済み。
来年はNintendo Switch が販売されるのが楽しみ。

外国語

英語は去年末より会話力は落ちた気がする。
お金の節約でiknow辞めたのは少し痛いかもしれない。今年は人生で初めてのTOEIC を受けてみたので、一応の自分の学習の目安として一年に一度ぐらいは受け続けていきたい。

トルコ語は、まだまだ勉強中。会話をしっかりこなせるように来年は目指していきたい。

ベトナム語は完全にもう挨拶フレーズのみ。発音が日本人には無理ゲー

今年はなんといっても、年末に所属している会社がなくなるというビックイベントが発生。正確には親会社に吸収合併されるので、働く場所が消えるわけではないのですが、会社文化が完全に違う会社に吸収されるか、他の働く場所を探すか散々迷った挙句、働く場所を変えることを選択しました。来年からは新しい会社で頑張っていきたいと思います。目指せWEB系!でも組み込み系の仕事もしたいので、それが別口で出来たらいいな!

2016/11/10

Smaller APKs : Android におけるAPKを小さく保つためのテクニック

Android Performance Patterns Session にいい動画が上がっていたので、備忘録として中身を書き出しておく

Removing Unused Resources

gradle file にて以下の minifyEnabledshrinkResources をセットしておく。

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro'
        }
    }
}

これらはアプリ内で使用していないリソースを除去してくれます。

Multi Resources Support

Android がサポートしているリソースサイズを全て揃えるとそれだけで結構な量になるので、必要なものだけ使う。

ldpi mdpi から自動で作られる
mdpi
tvdpi 使わない
hdpi xxhdpi から自動で作られる
xhdpi xxhdpi から自動で作られる
xxhdpi
xxxhdpi
  • mdpi
  • xxhdpi
  • xxxhdpi

のみ使用する

Vector Drawables

PNG や JPEGの代わりに vector 画像を使うようにする。

Reuse Existing Resources

可能であれば画像の再利用を行う、
例えば、下向きの矢印を上向き矢印に変更するなど。 他にもAndroid の機能を使って、以下のものを変更できる。

  • color tint(色味)
  • shapes(形)

Removing Unused Code

  • ProGuard を使う
  • ProGuard を使う時は、minifyEnabled true を使って ProGuard の仕事量を減らす。
  • 必要なライブラリの軽いバージョンを見つける、どうしてもない場合は必要な箇所のソースだけ抜いてくる。

Apk Analyzer

Android Studio 2.2 から搭載された apk analyzer を使う。

2016/07/21

Laravel :: phpunit with clean database.

Laravel + postgresSQLを使ったサイトで unit test を書いてたが、既存のデータベースを使うと、テストが意図しない挙動になることがあったので、汚れていないDBを使いたくなったので、調べてやってみたら、意外と詰まってしまったという話。

環境

  • laravel 5.x
  • PostgreSQL

sqlite in memory database を使う方法

config/database.php

環境変数で default 値を差し替えれるようにする

'default' => env('DB_DEFAULT', 'pgsql'),

config/database.php

memory database の定義を作る

'sqlite_testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
],

phpunit.xml

環境変数追加。環境変数を与える方法は別に何でも良い。

~~~~~~~~~~~~~
        <env name="DB_DEFAULT" value="sqlite_testing"/>
    </php>
</phpunit>

TestCase.php

都度migrateをするようにする。

  public function setUp()
  {
      parent::setUp();

      $this->artisan('migrate');
      $this->artisan('db:seed');
  }

  public function tearDown()
  {
      $this->artisan('migrate:reset');
  }

これで上手くいく人は上手くいく。


Sqliteでエラーがでる場合の対処1

Driver not found

[Symfony\Component\Debug\Exception\FatalErrorException]
Class 'Doctrine\DBAL\Driver\PDOSqlite\Driver' not found

が出たら。

cmposer に

"doctrine/dbal": "^2.5"

ALTER TABLE SYNTAX ERROR

さらにエラーが出る。
ALTER TABLE が syntax エラーと migration 中に出る。

ここからヒントをもらう。

以下のスレッドの中で、SQL Features That SQLite Does Not Implement [sqlite.org] を参照。つまり、sqliteで実装されていないので、エラーになっている。

ここを参考に、

エラーがでない内容の migration だけを行い、
そのsqlite file をテスト前にコピーして、テスト後破棄するというもの。

少々面倒。

また以下問題も見つかる。

migration 中にエラーが出たら、エラーが出たファイルを消して、migration を終了させた後、テストを流してみたが、特定のカラムが無いというエラーが起きた。
一つの migration ファイルの中で、ADD COLUMNDROP COLUMN 両方を入れているとエラーにならず、追加もされない。

Sqliteでエラーがでる場合の対処2

sqlite を諦め、PostgreSQL に一時的な testdb を作成し、
そちらでテストを行い、終了後は drop database する。

script を書きそれを実行した。

psql -U postgres -c "CREATE DATABASE testdb"
php artisan migrate --database=pgsql_testing
php artisan db:seed --database=pgsql_testing
phpunit -c phpunit.xml "$@"
psql -U postgres -c "DROP DATABASE testdb"

これでようやく上手くいった。

2016/07/02

[読書メーター] 2016年6月まとめ

並行して、色々と技術本を読み始めたので、
読了数が少なくなったけど気にしない。



2016年6月の読書メーター
読んだ本の数:1冊
読んだページ数:400ページ
ナイス数:4ナイス

ゲームウォーズ(上) (SB文庫)ゲームウォーズ(上) (SB文庫)感想
フルダイブ型仮想世界がインフラ化してる世界で製作者の仕込んだ謎を解くと国家予算並の遺産をゲットできるエッグハントが始まって数年。80年代マニアの製作者が用意した最初の謎を問いた主人公と続々続いて謎を説いていく他のプレイヤーたち、お互いの姿が見えずとも明日にはライバルが次の謎を解いて先に行ってしまうかもしれないという焦燥感とシンクロする。80年代マニアック知識も良いし、海外小説であることを主張する翻訳も良い。
読了日:6月30日 著者:アーネスト・クライン

読書メーター

2016/06/05

[読書メーター] 2016年5月まとめ

ようやく読書の習慣が少し戻ってきました。
英語の勉強が少しだけひと段落したってのもあります。(まだまだ続きますけど)
仕事本の読み込みが相変わらず終わらないので、速読読了を目指してみたいと思います。
速読中々難しいですね。頭の中の音読音を消すらしいのですが、その状態が長続きしません。
精進精進


2016年5月の読書メーター 読んだ本の数:4冊 読んだページ数:887ページ ナイス数:3ナイス マグダラで眠れ (8) (電撃文庫)マグダラで眠れ (8) (電撃文庫) 読了日:5月13日 著者:支倉凍砂
声優魂 (星海社新書)声優魂 (星海社新書)感想 大塚明夫さんの昨今の声優に対する苦言から始まり、最終的には仕事・人生論。考え方の大枠が私と似てる気がする。大塚さんの方が年食ってる分もっと上の考えを持っていそうですが。すとんと腑に落ちました。 読了日:5月6日 著者:大塚明夫
半値になっても儲かる「つみたて投資」 (講談社+α新書)半値になっても儲かる「つみたて投資」 (講談社+α新書)感想 保険屋の知り合いに進められて読破。色々な例が出てるので実際に自分で計算して言ってる事が正しいかは検証可能。 読了日:5月6日 著者:星野泰平
ダーリンは外国人 ベルリンにお引越し トニー&さおり一家の海外生活ルポダーリンは外国人 ベルリンにお引越し トニー&さおり一家の海外生活ルポ 読了日:5月1日 著者:小栗左多里,トニー・ラズロ
読書メーター

2016/05/11

[読書メーター] 2016年4月まとめ

4月は小説のみ、理由はなんだろう無いかもしれない。
読書が習慣から抜けつつあるな。なんとかしたいところ。


2016年4月の読書メーター
読んだ本の数:1冊
読んだページ数:392ページ
ナイス数:2ナイス

マグダラで眠れ (7) (電撃文庫)マグダラで眠れ (7) (電撃文庫)
読了日:4月18日 著者:支倉凍砂

読書メーター

2016/04/12

[読書メーター] 2016年3月まとめ

先月分の読書も一冊でした。
今回は3月中2週間ほどベトナムに出張しており、
本持っていけば良かったのですが、持って行かず、このような結果になってしまいました。
(空港での待ち時間とか生き返り合計すると優に3時間以上は暇な時間あったのにもったいない)
次回は2冊ぐらいはいきたいものですね。



2016年3月の読書メーター
読んだ本の数:1冊
読んだページ数:236ページ
ナイス数:8ナイス

エンピツ戦記 - 誰も知らなかったスタジオジブリエンピツ戦記 - 誰も知らなかったスタジオジブリ感想
一気に読了。原画チェックとして長年ジブリで仕事をされていた方の回顧録でもあり、ジブリ自体の回顧録でもある。宮崎監督の凄さ理不尽さ、作品を仕上げることの大変さの一片が感じられる。
読了日:3月28日 著者:舘野仁美,平林享子

読書メーター

2016/04/04

Docker registry を構築した後のimage整理

Docker registry を作って、別チームに任せて放置する

Docker registry で image 管理をすると段々とゴミが溜まってきます。API(https://docs.docker.com/v1.6/reference/api/registry_api/#delete-a-repository)で削除できるのはTAGがついているimageだけなので、
TAGが外れているimagesがどんどん残っていきます。

エラーが起きる

ずーっと管理せずに放置していると、ある日こんなエラーと出会います。

HTTP code 500 while uploading metadata: "invalid character '<' looking for beginning of value"

これは、message push しようとしたり、する必要があるかをregistryに確認したところ、正常なjsonレスポンスではなく、htmlのエラーページが帰ってきたため起きたエラーです。

不要なimageを削除する。

以下スクリプとが非常に有用です。
jqのインストールが必須になります。

kwk/remove-orphan-images.sh
https://gist.github.com/kwk/c5443f2a1abcf0eb1eaa

追記:実行時のエラー

私の場合、実行時に下記エラーが出ました。

parse error: Invalid numeric literal at line 144, column 114

これは直前に表示されたrepository名のindexファイルが破損していたため、起きた現象でした。手修正でindexファイルを修正したところ、うまく動きました。

2016/03/05

[読書メーター] 2016年2月まとめ

またしても一冊のみ。
現在読書中の本が積まれていく。
1月の低スコアを反省して読み始めているけど、未だに起動には乗らず。
後、速読しようと指差し法を試してみたところ結構調子よく読みはじめることが出来ましたが、
2月中には間に合わず、このような結果になってしまいました、

3月は諸事情からさらに本読みにくくなるかもしれないけど、合間見て頑張ろう。


2016年2月の読書メーター
読んだ本の数:1冊
読んだページ数:190ページ
ナイス数:1ナイス

四つ話のクローバー四つ話のクローバー
読了日:2月13日 著者:水野敬也

読書メーター

2016/02/18

LMDE2とデュアルブートしているwindows 7 を 10 にアップグレードする

結論から言うと、特に何も問題なく、あっさりアップグレードできました。

参考にしたのは以下のページ
How to Upgrade a Linux Dual-Boot System to Windows 10
http://www.howtogeek.com/226295/how-to-upgrade-a-linux-dual-boot-system-to-windows-10/

環境

まず私の環境を再度確認。
Windows 7 SP1 と LMDE2 とのデュアルブート環境。
Windows の Cドライブが入っている物理ストレージに LMDE2 を同居かつ、GRUB2が入っています。

Windows10 アップグレード

上記記事の内容だと、Windows 10 アップグレード後に、GRUB2に影響が出て、Windows は起動できるが、Linuxは起動できない状態になるとありましたが、アップグレード後特に問題なく起動出来ました。

注意点としては、Windows 10 アップグレード時に3〜4回ぐらい(忘れました)再起動しますが、その時はGRUB2から Windows を選択してやる必要があるため、基本的にパソコン前に張り付いておく必要があります。

Windows 10 アップグレード後、GRUB2 への影響

何もありません。
何もないので、引き続き GRUB2 には Windows 7と表記されいます。
上記リンク先に、 ubuntu での GRUB2 の表記を Windows 10 に更新する方法が書かれていたので、それをヒントに LMDE2 でもできるかもしれませんが、特に困った事はなかったので私 7 の表記のまま使っています。

私はアップグレード時に、特に問題は起きませんでしたが、
他の環境ではどうなるか分からないので、ファイルはバックアップをしっかりとってから実行して下さい。

2016/02/03

Android 5.0.2 以上でBLEが動かない

Occurrence -事象-

機材とAndroid を BLE (Bluetooth low energy) で繋ごうとしたところ、Android 5.0.2以上の端末で Security Exception が発生した。
5.0.1 や 4.2 などは問題ないが、5.1や6.0で発生する。

エラー内容は以下のようになっている。

java.lang.SecurityException: Need BLUETOOTH_PRIVILEGED permission: Neither user 99999 nor current process has android.permission.BLUETOOTH_PRIVILEGED.

発生箇所は BluetoothGatt#setCharacteristicNotification

Causes -原因-

StackOverflow にほぼ発生事例そのままの報告がある、

Android 5.0.2 onwards don’t allow HID access through Bluetooth LE

さらに、Android Issues に [BLE] Reading/writing char/descr of a HID service throws an exception があり、その中で

“Enforce BLUETOOTH_PRIVILEGED permission for HID-over-GATT”

のメッセージのコミットが原因でHIDに対する GATTのコネクションに BLUETOOTH_PRIVILEGED が要求されるようになったと書かれている。

HID とは ?

HID(Human Interface Device)のことで、
マウスやキーボードなどの入力装置を無線化するためのBluetooth用のプロファイル。
本来上記の通り、マウスキーボードなどに使われるものだが、健康器具などにも使われているケースがある。確かに人が使うものだけど。

BLUETOOTH_PRIVILEGED とは?

Android Developers によれば、

Allows applications to pair bluetooth devices without user interaction, and to allow or disallow phonebook access or message access. This is not available to third party applications.

HIDに関係ありそうなのは、メッセージに対するアクセスかな?
全然HIDと関係なさそうに見える。
ただ一番大事なのは最後のサードパーティアプリはこれを有効に出来ないという一文。
ビルドインアプリを開発するか、OSのビルド署名を貰えるようなアプリ開発の時は問題ないが、普通にアプリを作っている場合は、この権限を有効化する方法はない。

see also AndroidDevelopers::Manifest.permission::BLUETOOTH_PRIVILEGED

Summary -まとめ-

HID を使ってるかの判断

以下のコミットによると、HIDの判断は, Characteristic UUID が
https://android.googlesource.com/platform/packages/apps/Bluetooth/+/02bebee

00002A4A-0000-1000-8000-00805F9B34FB
00002A4B-0000-1000-8000-00805F9B34FB
00002A4C-0000-1000-8000-00805F9B34FB
00002A4D-0000-1000-8000-00805F9B34FB

のいずれかに該当した場合となる。

上記 Characteristic を引数にしてい BluetoothGatt#setCharacteristicNotification をコールすると SecurityException が発生するようになっている。

禁止された Characteristic UUID

Bluetooth Developer portal で Characteristic UUID の区分け確認できる。

Characteristic UUID 内容
00002A4A-0000-1000-8000-00805F9B34FB HID Information
00002A4B-0000-1000-8000-00805F9B34FB Report Map
00002A4C-0000-1000-8000-00805F9B34FB HID Control Point
00002A4D-0000-1000-8000-00805F9B34FB Report

see also Bluetooth Developer portal : Characteristics

なぜ禁止されたのか?

わからない。
結論から言うとわからない。なんらかのバグ修正としてコミットされているが、
どのような背景があるのかはわからなかった。

[読書メーター]2016年 1月まとめ

絶望的なまでに本を読んでいない。
月末にTOEICの試験があったとはいえ、これはひどい。

完全に読書の習慣が抜けてしまっている、
目標立てて無理矢理でも読まないと本を読まない人になりそうだ。


2016年1月の読書メーター
読んだ本の数:1冊
読んだページ数:0ページ
ナイス数:1ナイス

カメラマン 2016年 02 月号 [雑誌]カメラマン 2016年 02 月号 [雑誌]
読了日:1月24日 著者:

読書メーター

2016/01/22

Scrum Gathering Tokyo 2016

Regional Scrum Gathering Tokyo に行ってきました。

Scrum Gathering って何?

正式名称は
[Regional|Global] Scrum Gathering (場所)
になります。
Scrum (参照 スクラムガイド.pdf)を実践している人たちが集まり、発表をし、それぞれがそこから何かを学び取ろうという二日間丸一日ぶち抜きのイベントです。

今年は会社がお金出してくれたので気兼ねなくいけました。

どんな内容?

午前中は 開会の話 と基調講演で両方とも英語ですが、同時通訳機と同時通訳の人がいます。英語から日本語、日本語から英語どちらも対応しています。
私はがんばって同時通訳機なしでチャンレンジしてみたので、どれぐらいの精度だったのかはわかりません。

午後からは各自のセッションが基本的には30分ごとにあり、基調講演が行われたメインルームを2つに分けて2コマずつ同時進行で行われますので、自分が聞きたいと思う方を選んでみていく感じです。

参照:http://2016.scrumgatheringtokyo.org/schedule.html

Day 0

前夜に基調講演をする Bas さんや Ken さんを交えて飲み会しましょうというのがあったので、ほぼ飛び入りで参加してきました。
今年はEary Birdがあまり売れず、正規の値段でビシバシチケットがはけたからか知らないけど、飲み代は向こう持ちでした。ラッキー。
Kenさんとても気さくな方で写真も一緒に撮らせてもらいました。

Day 1

東京に久しぶりの大雪、色々な場所で電車がとまるとまる。
まさにエクストリーム出勤。
仕事だったら家に帰ってたけど、仕事じゃないから仕方ない!

Opening Talk

Scrum Alliance CEO の Pete Deemer さんがお話し。

Keynote

Bas Vodde さんの The Story of LeSS
LeSS に関しては前から気になっていたので、そこを聞こうと思ったけど、勉強会以上の情報はあまりなかったかなぁ。
一番気になったのが、Component team を Feature team にせよの箇所。
私のチームは Feature team 作ろうとして、Component team として扱われているよな。と猛省。

Sessions

参加したのは

  • No Reuse Before Use
  • Bridging the communication gap with Specification by Example
  • Offshore and Nearshore Scrum teams
  • ゲーム作りから導くスクラムマネージャー(資料)
  • Technology-Driven Development

どれも面白かったけど、一番面白かったのはTAI氏の Offshore and Nearshore Scrum teams かな。彼はベトナムでアジャイルコーチをやり、オフショアでスクラムを実現している。自分もベトナムとのオフショアでスクラムを導入しようと模索しているところなので、彼が言う成功の秘訣などはとても参考になった。

Open Jam

会場外でもセッションを行うスペースがあったので、そこでのセッションも参加してみてました。

Day 2

雪はあがり、打って変わって晴天。

Opening Talk

Scrum Alliance CEO の Manny Gonzalez さんがお話し。

Keynote

エッセンシャル スクラム の著者 Ken Rubin 氏による、 Economically Sensible Scrum
かなり実践的な内容で、定義から妥協案までいかにスクラムを経済的に成功させ実現させていくか、について語ってあります。読んだことなかったけど、エッセンシャルスクラム読んでみようかな。

Sessions

以下に参加

  • Cisco’s Agile Journey – Continuous Delivery and Scaling Scrum
  • レゴスクラムの覚醒 / The Lego Scrum Awakens
  • フィリピンのスタートアップにスクラムを導入しようとしてみたお話(資料)
  • 金融系IT企業におけるスクラムへの挑戦
  • Customer Expectations Management of Scrum スクラムにおける事前期待のマネジメント

文句なしに一番面白かったのは藤村さんの フィリピンのスタートアップに〜… 一番笑えた!そして何気に教訓もそこかしことに散りばめられててこれは良い。文句があるとすればマイクを使わないでよかったのではという声量ぐらいか(スタッフが慌ててマイクの音量を下げに行ったと裏話を聞いた)。
金融系〜は名前に偽りはないけど、ついつい金融業務にスクラム使ったのかと期待してしまっていたが、そこは肩透かしを食らった気分。でもやっぱアジャイルコーチいた方がいいんだよな。と感じる。

得た教訓

  • オフショアで2チームでスクラムやるなら、それぞれメンバー( ambassador )の送り合いをする
  • 前に進むパワーはかなり大事
  • スクラムの全体性はスクラムにとってはとても大事
  • Component team ではなく、 feature team を目指す。
  • Component team は cross-functional であることもあるが、 single component である. 参考
  • Feature team は cross-functional かつ cross-component である。
  • スキルセットはTゾーンであればよい。

参考

Regional SCRUM GATHERING® Tokyo 2016
スライド資料のRTをしているのでチェック > 公式ツイッター

2016/01/14

LMDE2のNVIDIA Driverを更新する

LMDE2 に NVIDIA のグラフィックドライバを入れます。

Inspect your graphic board

terminalで

lspci -vnn | grep VGA -A 12

Download a driver Installer

NVIDIAの公式サイトからLinux X64用のDriver Installerを手に入れます。
私の場合は以下から
http://www.nvidia.com/download/driverResults.aspx/77525/en-us

NVIDIA-Linux-x86_64-340.32.run というシェルファイルを手に入れました。

Prepare Installation

reboot し grub で recovery mode を選択し、
ログイン画面で、Ctrl + Alt + F1 を押してCUIモードになります。
ユーザーログイン後、

sudo update-initramfs -u

を実行します。
これはNVIDIAシェルがカーネルモジュールを追加するため必要になります。
これが実行されない場合
Nouveau kernel driver を止めてくれとのエラーメッセージが表示されます。

Installation

再度再起動し、recovery modeになり、CUIモードにログインします。
X serviceを止めます。

sudo service mdm stop

インストールを実行します。

sudo sh ~/Downloads/NVIDIA-Linux-x86_64-340.32.run

後は画面の支持に従い、選択していくだけです。
終了後は再度再起動して、ログインしましょう。

2016/01/12

[読書メーター]2015年 12月読書まとめ

先月も本を全然読めてませんね。
昨年7月あたりから職場環境が変わったせいで、
通勤電車内は英語の勉強の場へと変わってしまったので、
1日2時間、一週間で10時間の読書時間がどこかへ行ってしまったのが原因ですね。
なんとか取り返したいと思います。

とりあえず、なにか小説読みたいですね



2015年12月の読書メーター
読んだ本の数:3冊
読んだページ数:448ページ
ナイス数:4ナイス

デジカメ初心者がプロの一言でこんなに変わる本デジカメ初心者がプロの一言でこんなに変わる本感想
思ったよりも良いことが書いてあった。悩んでる写真好きな人におすすめ。
読了日:12月14日 著者:石田徳幸
イギリス英語はおもしろい LIVE! (CD BOOK)イギリス英語はおもしろい LIVE! (CD BOOK)
読了日:12月14日 著者:大杉正明
インスタグラム・マーケティング入門インスタグラム・マーケティング入門感想
Samsung kindle で貰えたのでとりあえず読んだ。
読了日:12月9日 著者:山田智恵

読書メーター

臆病者のための Ansible

Target

Ansible を使ってみてその便利さに驚愕するとともに、他人が作ったPlaybookを引き継ぐ怖さも知る。
全て手順書のように書いていればいいのだが、多数のRoleを使い高度に書かれたAnsible playbookを引き継ぎ、メンテまたは代わりに実行するのはとても怖い。
playbook実行する前に何がどうなるのか確認しまくりたい。

そんな自分のための初心者ガイド

Links

実行の仕方など基礎的な事は公式ドキュメント参照

Hello world
http://docs.ansible.com/ansible/intro_getting_started.html

どうやって使うかのオススメ、ディレクトリ配置など
http://docs.ansible.com/ansible/playbooks_best_practices.html

確認コマンド

playbook は実行前に色々確認したいですよね。

基本

ansible-playbook playbook.yml

これで playbook が実行されます、設定がしっかりしてる環境であれば、外部サーバに実際に変更を行ったり、時には取り返しのつかない変更が実行されたりします。何も考えずに実行するのは危険

確認 hosts

ansible-playbook playbook.yml --list-hosts

playbook は実行されません。
playbookが実行される相手先をリストアップするだけです。
host は hosts ファイルなどで定義された ansible のためのサーバー接続先設定のことです。

制限 hosts

ansible-playbook playbook.yml -l hoge --list-hosts

-l の後に host 名もしくは hostgroup 名を入力すれば playbook の接続先を制限することができます。 --list-hosts と組み合わせると捗ります。

確認 tasks

ansible-playbook playbook.yml --list-task

playbook は実行されません。
各タスクの-name箇所が実行順番通りに列挙されます。
-nameをきちんと書いておけばきっちり確認になります。

私は気になる箇所は 出力内容で grep 検索しています。

確認 最終

ansible-playbook playbook.yml -CD

playbook は実行されません。
-CD-C, --check, -D, --diff の合成です。
二つ同時に実行したほうが効果的です。
playbook は実行されませんが、実際に各 host に接続し、
実際に実行した際のファイル差分(あれば)が表示されます。

playbook の構成によってはエラーになりますが、内容をよく見て本当にエラーか確認してください。
例えば以下手順は playbook が正常であっても、エラーになります。

  1. ansible がファイルAを消す
  2. ansible がファイルAがないことを確認する

実際にはファイルAは消されていないので手順2でエラーになります。

また、さらに詳細に内容がみたい場合は以下実行して下さい

ansible-playbook playbook.yml -CD -vvvv

-v, –verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)

では良いAnsibleライフを