だ。ログ。

開発とかスノボとかやきうとか。

LambdaでGoogleHangoutsChatにメッセージを送る

https://dev.classmethod.jp/cloud/aws/google-hangouts-chat-integration-with-aws-lambda/dev.classmethod.jp

ここにあるソースコードの通りで動く。
なのでソースコード部分に関しては上記のリンクを観た方が早い。

ただLambdaド素人の自分はソースコードだけでは動かず右往左往。
要点としては

・自分で環境を整えて利用するライブラリをソースコードに包括しておく
・ファイルをzip形式で圧縮してLambdaにアップロードする

この2点が理解出来ればLambdaでの自動化の部分が身近になってくると思う。

自分で環境を整える

何が言いたいかと言うと、上記のリンクだとrequestsで必要なファイルを実際に送信するソースコードと一緒にアップする必要があると言うところ。

	$pip3.6 install requests -t.

requestsの後ろの -t.が必要で、現在のディレクトリにライブラリ実体をファイルとして利用できるようにする。と。

zipで上げる

整えた環境のディレクトリをPCに一旦保存した後にzipに圧縮する際の注意として、ダウンロードしてきたディレクトリを圧縮すると
lambdaにアップロード後、ディレクトリが親ディレクトリとなってしまう。

[ プロジェクト名 ]
└[圧縮したディレクトリ]
├ファイル1
├ファイル2
├ファイル3

と言う事になってしまう。圧縮したディレクトリが邪魔。
なので、ファイル全体を選択して圧縮をすること。

あとはソースコードが正しく書けていれば動作確認が取れる。
ChatWorkにも送信事態は出来たが、GSuiteを使っているのでどちらにするか迷い中。
個人的にはWebhookが簡単につくれるhangoutChatの方が手間が掛からないなと。

python3.6をインストールした際にpipが使えない

lambdaを使う為にpython3.6でソースコードを書かねばならずcentos7にてpythonをインストール

	$yum install -y https://centos7.iuscommunity.org/ius-release.rpm

これでpython3.6のリポジトリを取得。
んでインストール

	$yum install python36u python36u-libs python36u-devel python36u-pip

サクっと完了。
動作確認のために、hello.pyを作る。

	print("hello")

これを実行する。

	$python3.6 hello.py
>hello

出た。

んで、lambdaで動かしたいのでpipを使ってrequiresをインストールする

	$pip install requests

ここで問題発生。
コマンドが見つかりませんと出る。

pip3もダメ。
じゃあ何ならと調べたら

	$pip3.6 install requests

これで動いた。
結局の所はインストールした物を明示的に指定しなきゃダメなのね。と。

はじめてのLambda

AWSのサーバーのアラートをChatworkに飛ばしたい
ってのが前提で、あまり手付かずだったLambdaに着手。

まず手始めに
https://qiita.com/don_hanabi/items/3bd729bf0458d10b8d5e
qiita.com


上記のサンプルコードをそのままコピペする。
利用するランタイムはNode.js 6.10

ここで間違えてはいけないのは、ファイル名は index.js にしておく。
意図的に自分のテストですって事をファイル名につけていたら

Cannnot find module 'index'

と出てしまい、テストが実行できなかった。
とりあえず、テスト実行からチャットワークへの投稿自体は出来るよになったが
メッセージが途中で切れちゃうのは自分が悪いのか。。

この辺はいまのところ手探り。

オフショアと言う夢。

コスト削減をしたいと言う会社の意向は分かる。
エンジニアが正しい金額で働いているかと言う事は、尺度で測る術があまりないからだ。
そこで出てくるのは、これ以上部隊を強化するよりも安い金額でお願いする。

オフショアと言う事になる。

じゃあ具体的にオフショアってどうすれば良いと言うナレッジが一般の企業にはない。
新たに持ち込まれたコスト削減策をどうすればコスト削減になるかと言う具体的な部分の議論がないのである。
全てが全てではないが、オフショアの紹介先から言われるがままに部隊の確保が完了したと言う話が降りてくる。

「じゃ、あとは現場がうまく使ってね」

この一言で現場は混乱がはじまる。
そもそも現地のコーディネイターとも会話した事がない。
しかも部隊が使える技術力の把握が出来ていない。紹介者もサイトの上辺だけを見て大丈夫ですとしか言っていない。

まずは仕方なしに小さな改修をお願いする。
まーこの位なら。と言う気持ちで経験の浅めの人間に仕事を依頼する。
1日後返ってきたメールには烈火の如く怒りに満ちたモノである。

・詳細に練られた設計
・正常時の最終的な完成イメージ
・異常時の対処方法


そして先方からこのフォーマットに合わせろと言う指示の元に書く。
たかだか2,3行の修正の為に、結果まで全て包括した設計が必要となる。
仕方なしに仕様理解と変更に伴う結果が分かる人間が仕様書のレビューをする。
そのレビューを通ると今度はオフショア様側にお伺いを立てる。

オフショア様側は分かりました。と返答とともにシステムを完成させる。

ところがだ、この数行の変更で済むはずのシステムが何故か外部プラグインを取込み仰々しいまでの変更が加えられている。
確かに満たす所の動作は出来ているが、動作させる為に様々な所に変更が掛かる。
トレンドを追った結果、言葉で伝えれば最初に烈火に怒られた人間が30分もあれば出来る事に半日以上を費やした。


さて、これが簡単なシステムであればまだしもである。
複雑なシステムになってくると、今度はコーディネイターとの信頼構築が必須となってくる。
提示されたドキュメントに沿ってドキュメントを作成する。
提出して返ってくる言葉は意外とあっさりと「分かりました」と返ってくる。

結局この納品で地獄を見たのは何あろう発注側である。
何が間違いだったか。

そもそもオフショアなんて使うこと

現場の結論としてはそれが全てである。
具体的に言えば、仕様に関しての大枠を組めば「ある程度」のモノは出せるので「ある程度」の大枠をこちらは提示した。
提示して出てきたモノは、そもそも論バグで動かない状態が「仕様だから」と言う事で作成されている。
そして一番の問題は、現状のモノを見てテストをしながら軌道修正が出来ないので、テスト仕様を決める事ができない。
勝手にUI部分を変更していたり、動的な要素が意図せぬ動きをしてくる。
そこまで含めて仕様に盛り込んで書けと言われる。

ぶっちゃけて言えば、自分が作った方が早い。
と言う事なのだ。

目の前で依頼者と話をしながら方向性やデザイン、内容のブラッシュが出来ない。
完全なるウォーターフォール型でウェブ開発を行わねばならない。
と言う事は

・視覚的要素のフィックス
・動的要素のフィックス
・システム仕様のフィックス
・テスト仕様のフィックス

ここまで出来て、はじめて「オフショア」が成立する。
一つでも欠けると、依頼者側が全てを担保する。それも現地コーディネイターは○○できてないから。○☓ではないから。
と言う理由で全てが動かなくなる。

最終的にどうなるか。
「もういい、俺が書く」

自分が使いこなせない事が悪い。確かにそれは事実だ。
しかし、上手く行く為にはどうすべきかと言う議論もなしに海外を使う事で開発力を国内より安価ですぐに用意する事ができる。
と言う具体例がないままに使うと、簡単に出来る事すらも簡単にならなくなる。
体制だけ豪華になり、ボトルネックが生まれる。

開発メンバーがディレクションとコミュニケーションに大半の時間を取られドキュメントを書かれ。
結局はそれにつきっきりになり「とりあえず作る」金額は抑えられたが完成までにはメンバーが対処するのでむしろコストフルになる。

と言う夢を見た。フィクション。

AIRJAM2018 レポ 東京駅~BRAHMAN

まさかの当選、pitpressに登録し「まー当たればラッキーかな」位で考えていたAIRJAM2018に一発で当選した。
フェスに参加するのは20代前半以来、10年以上が経過しい。
年に2,3回はKenYokoyamaのライブに行って暴れているが、フェスの長丁場。自分が耐えきれるかと言う事が一番の心配だった。

東京駅 → 海浜幕張 パンクスとディ●ニーの交わる京葉線

ゲートオープンは10時、オープニングアクトBRAHMANと言う事もあり10時には到着してグッズ買ったりワークショップ見たり。
それと近隣のコンビニは大渋滞だろうから、もう少し早く到着する必要がある。と感じ、東京駅に9時を目処に到着。
南コンコースから深く深くに降りていくと、pizzaofdeath等のバンドTシャツを着たフェス行きのファッションか黒のネズミミ等を着けたファッションか。

ちょうどホームに降りると停車していた京葉線は快速、9:40に海浜幕張に到着と言う事で乗車
車両は人人人でごったがえし、今日の演者でどこで休憩を入れるかと言う作戦を練る人、イヤホンから爆音で演者の曲を聞く人
これから始まるお祭りに備え目を瞑り少しでも体力を温存する人、周りを観ると様々な人が見える。
葛西臨海公園を過ぎ、舞浜前になると家族連れや若い子達がこぞって進行方向右側のドアに集まり始める。

ドアが開くと同時に駆け出す若い子とベビーカーをおろす為に発車ベルがなり終わってから降りる人とホームに降りていく。
そして京葉線にはAIRJAMに参加する人達が大半を占める。いよいよ海浜幕張だ。

ZOZOマリンスタジアムまでの道

今年6月の交流戦ZOZOマリンには2度訪れているので、降りたら海側に歩いて行けば良いと言う事は分かっていたので歩みをすすめていく。
QVCのビルにあるミニストップで水を買おうと入るも外までレジ待ちの列ができている。
ここで買えないとアパホテルにあるローソンのみ、自分はもうここまで来たらスタジアム内の水で良いと割り切ってしまったがローソンも相当な人だったようだ。

入場

歩道橋を渡るとスタンドとアリーナの入場先が違う。自分はアリーナだった為、ライトスタンドに向かって歩く。
バス降車場、駐車場の横にAIRJAMのゲートが見える。誰からともなくゲートへ小走りする。この時点で10時だが入場列が大行列はなく並んで5分ほどで入場。
右腕にオレンジと青のAIRJAMのリストバンドが巻かれ、いよいよ入場となった。

入ってすぐにモンスターエナジードリンクの提供とグッズが手に入る抽選会に参加。モンスターエナジーを飲み「さあライブだ!」と言う気持ちが湧き上がる。
が、すぐに入場してもと言う事で屋台のある中央ブース側へ。目の前ではジョイサウンドのカラオケでハイスタやBRAHMANマキシマムザホルモンの曲を歌い早くもモッシュがはじまっている。
この日を楽しみにし既にテンションが爆発しているのであろう。オッサンの自分にはあの元気があった頃に戻りたと切に思った。

グッズは特にあれこれと置いていない。多分Webサイトでの注文販売がメインだからであろう。
缶バッチにボールくらいしかグッズとしては売られていない。ならばと2Fコンコースのワークショップへ。
FATのブース、東北ライブハウス大作戦のブース、セイヴザヒロシマのブース、こうやって見るとただ商売する訳ではなく、AIRJAMに縁のある団体
そしてAIRJAMが復活した一つの要素でもある、自分達の手で何かができないか。と行動を起こしたワークショップが並ぶ。

自分は4号機Aタイプ時代に読み耽っていたパチスロ必勝ガイドのライターのガル憎氏が居るセイヴザヒロシマのブースへ。
広島と言う土地は血縁関係で縁のある地、そしてガル憎氏が直接販売をしてくれているシャツに感動しつつTシャツを購入
その他、東京初雪プロジェクトや幡ヶ谷再生大学、東北ライブハウス大作戦とブースを回ると11:30、ここから約10時間のフェスがはじまる。

開演前

11:40、普段だと入れないZOZOマリンスタジアムのライトと内野の境目のポール際から入場すると、早くもアリーナ前方は人が多い。
オープニングアクトBRAHMANの登場を心待ちにしている。前の人に続いて歩みをすすめると中央前方ブロックの文字、一番激しく暴れるブロックに歩みを進めカバンからタオルを取り出し照りつける太陽を遮ると難波章浩さんが登場
登場と同時に湧き上がる歓声と前へ前へと人が詰めていく波が出来る。
「今日は楽しんで帰ってね!」そう告げると、否が応にもボルテージはあがっていく。

BRAHMAN

FM新潟で放送されている難波章浩の今夜もclose to meのゲストでボーカルのTOSHI-LOWさんが言っていたライブ始まる前にみんな拝むんだよ。と言う話にどういう事だろうと思っていたが、ステージの左右のビジョンからBRAHMANの登場を告げるムービーが流れるとみんな一斉に手を頭の上に合わせ始める。
なるほどこりゃ壮観だと自分も手をあわせる。

SEE OFFが流れると同時にモッシュが起こり歌にあわせてシングアロングが始まる。
一曲目から誰もが知る曲を持ってきた事で、それまで少しだけ空いていた人と人の距離が一気に縮まりクラウドサーフが起こる。
SEE OFFが終わるまでに10人以上が自分の頭の上を過ぎていった。
曲が終わると早くも汗だらけ、そして投げられたペットボトルから散乱した水でシャツも濡れ肩で息をする状況
AIRJAMの開催を、そしてBRAHMANのステージを待っていたファンの熱気と逃げ場のない日光が容赦なく照らす。
その陽射すらも跳ね返すようにBRAHMANはBEYOND THE MOUNTAIN、賽の河原と惜しげもなくハードな曲をスタンドに響かせる。
守破離ではこの後に控えているはずのSLANGのKOさんが、今夜では細美武士さんが出てきてパフォーマンスに参加をし
オープニングアクトと言う役割の概念を壊すような、これから出てくる9組の演者に体力を温存させないような全力での演奏は止まらない。

ライブも途中に差し掛かるとTOSHI-LOWさんはアリーナ最前列からオーディエンスの上を歩む。鬼がスタジアムに降臨した瞬間だった。
オーディエンスの上でマイクを持つと、このAIRJAMのこと、仲間のこと、そして自分の近況を恥ずかしげもなくさらけ出す。
誰もがその一言一言に固唾を飲み見つめる。
ANSWER FOR…で再び激しいモッシュが起こり、鼎の問では歌詞に乗せたメッセージの節々までもをスタンドの隅々に響かせる。
そして真善美の演奏が終わるとTOSHI-LOWさんは青空と太陽が真上にのしかかるスタンドを見つめ下手側へと消えていく。

「今を生き抜くために」

この空間、時間に辿り着いた者、たどり着けなかった者が居る。
その中で自分は何をしていくのだろう。どう生きていくのだろう。
ただ激しく、ただ暴れるだけではなく、歌詞の端々から取れる生きる事へのメッセージ
真剣に今を生きる選択をしているからこそ、その歌声からあふれ漲る生への力をひしひしと感じた30分はあっという間に終わりを告げた。

カスタム構造のWordpressの移植の注意点

vagrantで毎回テスト用の環境を整えてまっさらなCentOSを入れている事もあるが
wordpressの移植を頼まれ、ある程度はQiitaを見ながらできたのだが、一点だけ上手くいかない部分がある。

それはカスタム構造になっているパーマリンク設定

http://hogehoge.local/%category%/%postname%.html

となっている部分である。
パーマリンク設定を見ればある程度冊子はつくが、この設定が入っている場合はmod_rewriteが入っていないと設定できない。

/etc/httpd/conf/httpd.conf

<Directory />
	AllowOverride None # ←コレを
	AllowOverride All  # ←こうする
</Directory>

単純な事だけどphp.iniの設定とかhttpd.confとか入れ忘れてる事が結構ある。
移植だからと手を抜かず基本のサーバー部分をちゃんとしとけと。

誤ったインタプリタです

自動実行用のスクリプトWindowsで書きサーバーにアップし実行した際に出たエラー
> /user/bin/php^M:誤ったインタプリタです

こんな表示が出た。
何かなと調査すると、どうやらWindowsファイルの改行コードをLinuxが文字列として判断してしまう。

$ cat -e hogehoge.php

上記のコマンドを実行すると改行に全て^M$が入ってしまっている。

これを取り除くためには

$ sed -i 's/\r//' 対象ファイル

上記を実行し、再度catで確認すると改行コードが抜けた。確認後コードを実行すると問題なく動作した。

最初から文字コードを意識しとけば良いけどウッカリって時に。