やる気パルスが回復するアニソン

40代のおっさんなので、新しいのは知りません。リンクは歌詞。

機動戦士ガンダム0083-STARDUST MEMORY-

THE WINNER
THE WINNER

銀河鉄道999

THE GALAXY EXPRESS 999
THE GALAXY EXPRESS 999

キン肉マン II世

愛のマッスル
愛のマッスル

真(チェンジ!!)ゲッターロボ 世界最後の日

今がその時だ
今がその時だ

六神合体ゴットマーズ

愛の金字塔
愛の金字塔


う。面倒になってきた。アニソンのリスト作るサービスくらいあってもよさそうなんだが…。

ボンクラ仲間探してます [Ver 2018.3.18]

ボンクラ仲間探してます (途中) - cougerの日記 の続きというか、リライト。また書き直すと思う。

今北産業

  • 「自分は何ができるのか」を言語化しようとする中で『無い才能を見切って』たら、ボンクラに行き着いた
  • 「念仏唱えて功夫積むしかない (by 角師父)」からは逃げられないと悟った
  • でも、修行は辛いし、ボンクラを受け入れるのもまぁまぁ辛いので、基本、笑っていられるよう、好きとか、面白いを大事にすることにした
  • 万が一オレもそうだって人がいたら、こっそり教えてほしい

若干ストーリーを作ってるところはあるけど、大体こんな感じのはず。 1つ目と2つ目はおそらく同時並行的に。どっちが先だったとかあんまないはず。

ボンクラとは?

角征典さんのブログでボンクラの定義が紹介されている。 BREAK Max (ブレイクマックス) 2011年 12月号で、吉田豪さんが町山さんにインタビューしたときの話だそうだ。

町山「ボンクラって、もともとシノギができないヤクザのことを言うんだよね。ヤクザの世界では、すごく頭がよくて商売をやってシノギができる人が正しいんだけど。ボンっていうのは博打で、博打とかお金のことがうまくできない人をボンクラって言うわけですよ。その人はどうしてヤクザになったかっていうと、ヤクザに変なロマンを持って入ってきてる人なんですよ。でも、そういう人は絶対成功しないんだよね。」

「商売が下手」「変なロマンを持っている」というところが私としてのポイント。
金稼げないわ、面倒くさいわ、で扱いづらいことこの上ないってことなんだね...orz

「自分は何ができるのか」を言語化しようとする中で『無い才能を見切って』たら、ボンクラに行き着いた

断っとくと、最初から「自分は何ができるのか」なんて大層なことを考えてたわけではない。
後、金稼ぐのは下手だと分かっていたけど、ボンクラとは認識はしてなかったように思う。

ボンクラに気づくきっかけは 【デンパ】 人間の業を肯定し、得体のしれないモチベーションを使ってアジャイルと付き合う - ボンクラの日記 に書いていた。

45歳になってとある教育を受けたとき、このまま情報ため込んで爆死はちと寂しいと考えるようになり

老い先短いと感じて、どうしたもんかと考えたらしい。
同時期(多分)に、 【全文公開】伝説の漫画編集者マシリトはゲーム業界でも偉人だった! 鳥嶋和彦が語る「DQ」「FF」「クロノ・トリガー」誕生秘話 を読んだ。

作家には「描きたいもの」と「描けるもの」があるんだよ。そして、作家が「描きたいもの」は大体コピーなの。既製品の何かで、その人がそれまでの人生で憧れてきたものでしかない。 鳥山明さんであればアメコミっぽい作風だとか、そういうものが「描きたいもの」としてあったけど、そこからヒット作はやっぱり出てこないんです。実際、鳥山さん自身の「描きたいもの」は、申し訳ないけどつまらないんですよ(笑)。

「描けるもの」はそう簡単に見つからないので、自分にとって「描きたいもの」は何だろうと考えた。 社内外のスゴい人などと比較しながら、自分にダメ出しして、「ない才能を見切った」結果、残ったのは「情報屋」だった。

まぁ見切ると言っても、エンジニア、マネージャ、事業家、コーチ、エバンジェリストくらいなので、「そりゃないわ」で終わるんだけどね。

今考えると「情報屋」にもスゴい人は沢山いるだろうから、見切るリストに入るはず。運良く?スゴい人のイメージがなかったから、ここならいけるのかも? と思っちゃったんだろうなぁ。

ともかく、やれそうなことがぐっと減った上に、ここまでお金のことを考える機会から逃げてきたこともあり、情報屋で稼ぐ方法も思いつかないので、「商売が下手」は確定。

「変なロマン」については「ボンクラの定義」を引用。

吉田「カッコ悪い金の稼ぎかたをしちゃいけない、みたいなことを考えちゃうわけですか?」 町山「そうそうそう。仁義とか考えたり、男同士の友情とかそういうのを考えてヤクザに入ってくる人は絶対成功しないんだよ。商売に向かないから。

オレが持ってる「変なロマン」はこの辺っぽい。これは確かに儲からない。
よく考えたら、入社して以来、メインストリート歩いてない。アジャイルもそうだ。今はともかく、ちょい前は傍流だった。ずっとオルタナティブなところを歩いてる。

そんなこんなで「商売が下手」「変なロマン」の2つが揃ってるボンクラな人なんだなぁと認識することになった。
※ 変なロマンを認識したのは、この記事を書いている最中である。

「念仏唱えて功夫積むしかない (by 角師父)」からは逃げられないと悟った

「念仏唱えて功夫積むしかない」は、勝手に師匠と仰いでいる、角征典さんから仕入れた言葉。
角さん、アジャイル界隈で知る人ぞ知るすごい人だと思ってるんだけど、知名度がどうも低いらしい。

微力ながら応援したいので、今度「角さんスゴい」エントリ書くことにしよう。

...脱線したので、元に戻る。

もともと飽きっぽく、いろいろ長続きしない性格なので、「念仏唱えて功夫積む」という行為は対極に位置するもの。 それでも、そこしかないんだなぁと気づくきっかけをくれたのは、「社内情シスにおけるDevOps導入のお手伝い」だ。

「社内情シスのお手伝い」では、「念仏唱えて功夫積む」を丸ごと経験した。

レガシーな開発をしてた人が、アジャイル/DevOpsの世界に入門し、2年もがいた結果、1週間で何かしらリリースするところまでこぎつけたのである。
ファンタジーでもない、どっか遠い世界の事例でもない、目の前で起こった事実だった。ちょっと驚いた。

このお手伝いを通じて、「環境をある程度整えて、時間をかければ、成長する可能性はある」という「念仏」を唱えて、ひたすら修行を続ける、「功夫を積む」ことで、生まれるものがあるんだなぁと実感できた。
ちなみにこの2年という時間を確保するために、マネージャーは胃を痛め、精神を削られながら頑張っていた。尊い。頭がさがる。

もちろん、マイクロソフトでDevOpsエバンジェリストをしていた牛尾さんが、偶然、情シスの取り組みに興味を持ち、幹部への説明や、技術支援、さらには、社外での事例発表の場を設けてくれるなど、様々なバックアップをしてくれなければ、この場所にはたどり着いてはいなかった。
タイミングというか、運が良かったという点は抜きにして語れないんだけども、そこはオレに制御できるものではないので、気にしないことにする。

後、アジャイル界隈でも、倉貫さんが立ち上げた ソニックガーデン の活動が、経産省を始め、様々なサイトで取り上げられており、自分の信じるものを軸にコツコツと続けている方々が成果を出しているのを目の当たりにし、勝手に感銘を受けているみうらじゅん氏の「ない仕事の作り方」や、大槻ケンヂ氏の「サブカルで食う」で「ボンクラは継続するしかないんだぞ」と諭され、ここから逃げることは不可能だと悟った次第。

あ、情シスさんの事例はde:code17で発表、資料がSlideShareにアップされている。動画もあるので、興味のあるかたは是非。

番外) 長く続けるための「自分なくし」

「昼の勉強会」についても少しだけ触れておく。
「昼の勉強会」では、長く続けるためのTIPSみたいなものを学んだ気がする。長く続けようとすると飽きるし、疲れるので、自分だけでは回すことができない。
結果、色んな人の手を借りて進めることになる。となると、全てを自分の好みで統一するのは不可能だ。というか、そんなことしたら手が借りられない。
だから、自分は何が好きで、何が嫌いなのか、どこが譲れないところなのかを考えることにした。
結果、「お気軽」な所だけ守れてたら、あとは何でもありってことにした。それが功を奏したかどうかはわかんないけど、自分的にはずいぶん楽になったような気がする。

みうらじゅん氏が言うところの「自分なくし」は「自分をなくすほど夢中になる」ってところがメインらしいんだけど、自分の譲れないところを最小限にしてみるってのもあるんじゃないかなぁと思った。
スゴい人なら自分の譲れないところを全部持っていけるんだと思うんだけども、オレはスゴい人じゃないので。

でも、修行は辛いし、ボンクラを受け入れるのも辛いから、基本、笑っていられるよう、好きとか面白いを大事にすることにした

書いてある通りである。辛い。
辛いが続くと心が荒む。オレの場合、心が荒むと他人のアラが許せなくなるらしく、周りへの当たりが強くなる。
功夫を積むために、他の人の力を借りないといけない人が、心が荒んで周りへの当たりを強くしてしまうと、暗黒である。

残念ながら回復力は高いほうではない。ので、一度荒むと自力で回復するのは難しい。
なので、なるべく荒まない方向で考えることにした。

  • 面白い、面白そうと思うもので修行する
  • 好きなもので身の回りを囲む

面白い、面白そうと思うもので修行する

最近、ハトマスクをかぶってあちこちで写真を撮っている。こんなの。

きっかけは「隣の人がハトマスクを持っていたこと」である。デイリーポータルZの林さんの記事(2013年)を見たときからいいなーくらいは思ってたんだけど、隣の人が持ってると知って、やりたいに加速がかかった。(自分が好きなことを誰かがやろうとしていると、やりたくなってしまうという困った性分があるらしい)

portal.nifty.com

北の方(社内)でちょうどイベントがあるということで、そこに持ち込むことにした。
最初は自分の写真が撮れれば十分だったんだけど、思ったよりウケたので、調子に乗ってあちこちで写真を撮った。
Twitterで流したら、意外とウケた。ので、さらに調子に乗ってあちこちで写真を撮ってみた。

が、続けてみるとやっぱり辛い。なんでオレこんなことしてるんだろうとか思うこともある。
ガンダムスタンプラリー では、全65駅でハトマスクかぶって写真を撮ってみた。撮るだけじゃ寂しいかとコメント入れてみたんだけど、全駅に入れようとするとこれまた辛い。

そういえば、最近写真撮ってなかった気もするな...撮らなきゃ。(義務に変わりつつある...)

と、まぁ、最初面白くてやったものが修行っぽくなってきたのである。
ただ、アジャイル界隈で初めてのイベントに行って「ハトマスクの人ですよね」で通じたりするので、コミュ障にとってはありがたかったりもする。いい写真が撮れると楽しいし。
なので、「継続する」修行だと思って続けることにした。

あとは、ソシャゲー。こちらも例に漏れず方々食い散らかしてたんだけど、運良く好みの絵や外連味のあるゲームに出会えたので、これ幸いと「継続する」という修行をすることにした。
ドラゴンスラッシュ」と「戦の海賊」がそれ。グレイソウルかっこえー!!! :D
俺的には、強いキャラに浮気して「オレ強い」欲求を満たしつつ、好きなキャラで萌えて継続するのがイイ感じらしい。

そんなこんなで、修行は面白いや好きなことをうまく使ってやることにして、仕事でやるのは最小限にした。

好きなもので身の回りを囲む

ここはあんまり言うことがない。
多少の荒みは「好き」が回復してくれる。笑うと力が抜けるのか、体が楽になることもある。
今日の好きは「Laurelさんのイラスト」。かわいすぎる!!!

好きなもので身の回りを囲んで、精神の安定を保っておけば、ある程度のことは面白がったり、笑ったりできるみたいだし。

おしまい

ということで、かなり長くなったけど、自分的にはボンクラとハトが繋がって非常に満足。
この先は、さっき紹介した変なロマン、

この辺を中心に、今までにあんまり表に出てこなかった(と思われる)視点で、アジャイル界隈を切り取ってみようかなぁと思う。 これまでに得た全ての理屈を、こういうわけわからんことを説明するために使うっていうのは、最高にムダな感じがして良い :P

アジャイルがメインストリームになりそうな今、アジャイルの中にあるオルタナティブを探しに行くのだ。

もしかしたら、似たようなボンクラな人にはフィットするかもしんないけど、そこは私にはわからない。万が一フィットした人がいたらこっそり教えてくれると嬉しい。

書けなかったこと

自己肯定の話も書きたかったんだけど、疲れたし、どこに入れればいいのかわかんなかったので、メモだけ残して終わる。

助けになったのは「ジョイ・インク」と「ザ・ヤングアメリカンズ

ジョイ・インクは、米国で最も幸せな職場と言われるメンロー・イノベーションズ社について書かれた書籍。
なぜ買ったのか覚えてない。でも、ショックを受けたのは覚えてる。 まずあるのが「喜び」。他のことは「喜び」に従属するもの。ややこしい理屈で生きてない。ものすごいシンプル。
素直に「喜び」でいいんだーって思った。書籍でいう「喜び」はオレの思ってた「開発者としての喜び」とは違うもので、ぶっちゃけ勘違いだったわけなんだけど、そこには後で気づけたし、勘違いでも救われたんだから、まぁよしとする。

ザ・ヤングアメリカンズの方は、正確には、彼らが行う「アウトリーチ」というプログラム。

ヤングアメリカンズは1992年から「アウトリーチ」と呼ばれる教育活動をスタート。学校やコミュニティを訪れ、小・中・高校生たちと一緒にわずか3日間(地域によっては2日間)で歌やダンスのショーを作り上げます。 ヤングアメリカンズが第1幕を、そして第2幕では参加者の子どもたちがヤングアメリカンズと共演し、ご両親、友達、先生方や学校関係者を驚かせることになるわけです。

学校でもらったチラシを子供が「受けたい」って持ってきたので、受けてみることに。
私は荒み時期だったので、まぁいいんじゃないって感じだったと思われる。が、最後のショーを見て驚いた...ハズ。

熱量もスゴいんだけど、子供たちが自信持って踊ってる。上手い下手関係なく。
全く知らないところから3日間でショーを作り上げるんだから、そりゃ至らないところだって山ほどある。でもそこは大事なとこじゃないのだ。
頑張って挑戦したことが尊いのである。

(以下、続く)

ボンクラ仲間探してます (途中)

とある機会に、懸田さん (@kkd) とボンクラの話で盛り上がった。

ボンクラはずーっとひっかかってるキーワード。なんでひっかかってるかっていうと、自分がボンクラだよなぁって思ってるから。

ボンクラとは?

ひとまずボンクラの定義を確認しよう。辞書と2人の偉大な先人からボンクラの定義を借りてくる。

辞書

頭のはたらきがにぶく,ぼんやりしている・こと(さま)。そのような人をもいう。 https://www.weblio.jp/content/%E3%81%BC%E3%82%93%E3%81%8F%E3%82%89

なかなかストレートだね。うん。

From 懸田さん

目標を掲げてまっすぐそこに邁進できる人と、目標を掲げるとか関係なく途中の過程が楽しければそれで満足な人の違い

一応言っておくと、後者がボンクラ。 目標らしきものは掲げるんだけど、途中で違うものが目に入ったりして、あちこち寄り道が激しかったりする。
寄り道どころか、最初の目標と違うところに着地してみたり。周りの人からすると何やってんだか良く分からないと思うんだけど、実はやってる自分も良く分からんかったりする。

From 角さん

XPは何を伝えたかったんだと思う?

www.slideshare.net

47ページくらいから、「なぜ私はマンガを描くのか?」って話が始まる。(XPの話なのに! 参考文献だそうです...申し訳ない)
以下の2つのタイプがあるらしい。

「1. 発想と動機」 大事なのは自分の中にある主張。プログラミングはあくまで表現ツール
「2. 表現形式」 プログラミングの可能性そのものを追求。発想や動機はあとからついてくる

で、

f:id:couger:20171216122617p:plain

オレだー!!! パイプライン作るのが楽しくなっちゃう。現場のニーズ置いてけぼり。

From ボンクラの定義 https://kdmsnr.com/2011/11/04/

角さんのブログでボンクラの定義が紹介されている。
BREAK Max (ブレイクマックス) 2011年 12月号で、吉田豪さんが町山さんにインタビューしたときの話だそうだ。

町山「ボンクラって、もともとシノギができないヤクザのことを言うんだよね。ヤクザの世界では、すごく頭がよくて商売をやってシノギができる人が正しいんだけど。ボンっていうのは博打で、博打とかお金のことがうまくできない人をボンクラって言うわけですよ。その人はどうしてヤクザになったかっていうと、ヤクザに変なロマンを持って入ってきてる人なんですよ。でも、そういう人は絶対成功しないんだよね。」

オレだー!!
アジャイルであれこれし始めて7,8年が経った。商売に向いてるなら、そろそろなんか出てきてもいいころだろうけど(実際事例とかみるとそんな感じだし)、出てくる兆しがない。
会社的には(ようやく)盛り上がり始めてるらしく、聡い人たちが動き始めてる。その人たちと話したこともあるんだけど、自分には話が大きすぎて、あーって言うしかない。

ボンクラエピソードあれこれ

掘り出すとなんか胸が苦しくなりそうな気もするけど、まぁ、エピソードあったほうが共感呼ぶらしいし。なんか書いていこう。
自分のだけだとツラいので、他の人のも紹介したいところ。

ボンクラでもいいんじゃないか?

自分を自分で救わないと、誰も救っちゃくれないので「ボンクラでもいいじゃない」 って言いたい。 とはいえ、材料がないと、一言言って終わりで広がらないので、なんか書く。

ボンクラ仲間を探してます

自分一人でやってると広がりがまったくないので、誰かと一緒にやらないと。
でもこんな話を掘る人なんてそういない(それこそ儲からない話だ)から、自分で掘りつつ、出会った人に話を聞くスタイルになるんだろうなぁ。

うまく集められたら、来年のアジャイルジャパンで発表してみようかなと思います。モブプログラミングの隣で。

ネタ

気になるものを集めとく。

立川流創設の頃まで、あたしは〈人間の業の肯定〉ということを言っていました。最初は思いつきで言い始めたようなものですが、要は、世間で是とされている親孝行だの勤勉だの夫婦仲良くだの、努力すれば報われるだのってものは嘘じゃないか、そういった世間の通念の嘘を落語の登場人物たちは知っているんじゃないか。人間ほ弱いもので、働きたくないし、酒呑んで寝ていたいし、勉強しろったってやりたくなければやらない、むしゃくしゃしたら親も蹴飛ばしたい、努力したって無駄なものは無駄--所詮そういうものじゃないのか、そういう弱い人間の業を落語は肯定してくれてるんじゃないか、と。」
立川談志師匠の「落語とは、人間の業の肯定」論について | ポンコツ山のタヌキの便り - 楽天ブログ

不惑の話。
ボンクラ的には「自分の限界を知った後でしかたなく決める覚悟をした」状態、選択肢が「でもやるんだよ」しかなくなっちゃったから、惑わない(惑えない)ってことなのかも。

あぁ、ペアプロやモブプロも、ボンクラで説明してみよう。 ペアプロとかモブプロはボンクラにこそ必要。一人でやってるとロクなことにならんので、誰かの助けを借りる必要があるのだ。 借りてるだけだと成り立たないので、相手のボンクラなところを自分のボンクラじゃないところで助ける。ボンクラ同士の助け合い。 何に対してボンクラなのかは、人によって違うから成り立つと思う。だから、似たような方向性のボンクラが集まると、あんま上手くいかない気が。ボンクラの多様性。 もちろんですが、ペアプロやモブプロをやってたら、ボンクラだって話ではないので、間違えないように。

ボンクラ、ボンクラ言ってると、ハラスメントとかで怒られる...のかななぁ。自虐的に言うのもアカンらしいとか言ってる人もいて。 そうなると、叫ぶところってカラオケ屋さんくらいしかなくなるんじゃないかなぁ。それじゃあまりに不自由だ...。

Application InsightsでAngularのページ読み込み時間は測れるのか?

なんでやるの?

フロントエンド(Angular)にAzure Application Insightsを入れてページビューを計測してみた - cougerの日記 の残ってる課題を調べてみようと思った。

分かったこと

切り替え時間を知りたい場合は、startTrackPage と stopTrackPage を使う。
trackPageViewではページ切り替えの時間を計測できない。

なんで?

trackPageViewで引数のDurationを指定しなかった場合、Application Insightsは Navigation Timing を使ってページの読み込み時間を計測する。 コードはこの辺。

Navigation Timingとは?

Navigation Timingとはブラウザがウェブサイトを表示するまでの間の一連のプロセスとタイミングを細かく定義したもので、Unload,Redirect,Fetch,DNSLookup,TCPConnect,Request,Response,Processing,Loadという処理プロセスとなっており、それぞれの境目にもStart及びEndというタイミングがあります。
この実装がNavigation Timing APIで、Navigation Timing APIとはこれらのタイミング毎に到達した時間を、それぞれUnixTimestampで取得できるというものです。
Navigation Timingを軸にJavascriptの実行タイミングを理解する - Qiita

「ブラウザがウェブサイトを表示するまでの間」なので、表示した後の画面の切り替えは計測ができない。そりゃそうだ。

じゃ、どうすんの?

startTrackPage と stopTrackPage を使う。

Navigation Timing APIを使わず、start, stopまでの時間を計測してくれる。
ApplicationInsights-JS/API-reference.md at master · Microsoft/ApplicationInsights-JS · GitHub

どこに埋め込むべきか?

startTrackPageはコンポーネントのOnInitか、ルーターのNavigationEndで良いんじゃないかと思う。
stopTrackPageは、OnInitの後、どこまでの時間を測りたいかによるんだろうけど、Serviceでデータを取得した後、DOMのレンダリングが終わるまでを測りたい場合、どこに仕込めばいいのか分からない。困った。
Serviceでデータを取得するところまででよいなら、 subscribe のコールバックで stopTrackPage を呼べばいいと思う。

全部のコンポーネントに入れるのタルい

だよねぇ...。とはいえ、コンポーネントごとに呼び出すサービスの種類や数が違うから、基底クラスを作ってそこで呼び出せばOKってわけでもなさげ。
今思いつくもので、一番影響が少ないのは、

  • 計測をあきらめて、画面切り替えが始まったとき(RouterのNavigationEndや、RouterOutletのonActivateなど)で trackPageView を呼び出す。
    • Durationを0にしておいたほうがいいかも。

かなぁ。 この方法でも、Application Insightsがページに関連するRequestの時間は計測してくれる(正確には違うんだけど)から、Requestに要した時間の合計までは計算できるはず。

Application Insightsで収集したフロントエンドとバックエンドのデータを関連づける (未解決)

方法知ってたら、教えてください!!!
お礼に、ハトマスクあげます。
回避策を中の人に聞けたりすると嬉しいんだけどなぁ。

なんでやるの?

低速なリクエストの診断ができるようになると楽になるんじゃないかなーと。

こんな感じでまとめてくれるっぽい。

https://docs.microsoft.com/ja-jp/azure/application-insights/media/app-insights-asp-net-dependencies/04-dependencies.png

あとまぁ、つなげられそうだから、つなげてみたい。(手段が先行するタイプ)

目標

ページビューからSQLまで計測結果がつながればいいかな。こんな感じ。

* ページビュー  (取れてる)
  * 依存(AJAX)  (取れてる)
    * リクエスト (取れてる)
      * 依存(SQL) (取れてない)

どうやってやるの?

Azure Application Insights Telemetry の相関付け | Microsoft Docs が参考になる。

さっきの構造だと、以下のようになればOK。

type id operation_Id operation_ParentId
ページビュー aaa aaa
依存(AJAX) 111 aaa aaa
リクエス 222 aaa 111
依存(SQL) 333 aaa 222
  • ページビューのoperation_Idを全てのtypeで利用する
  • operation_ParentIdは、呼び出し元のidを使う。

わかっていること

ページビュー -> 依存(AJAX)の所は、Application Insightsのライブラリがいい感じで関連付けてくれていた。(operation_Idも、operation_ParentIdも適切な値が設定されている)
なので、リクエスト -> 依存(SQL)の方もうまくできるに違いない。

とすれば、残りは依存(AJAX)とリクエスト、つまり、フロントエンドとバックエンドをつなげるところだけをなんとかすればいいはず。

調べること

以下の2点の実装方法。

  • フロントエンドからoperation_Idと、operation_ParentIdをバックエンドに送る方法
  • バックエンドで受け取った値を使って、Applicaton Insightsにデータを送る方法

フロントエンド

実装されているようだ。

// Default true. If false, the SDK will add two headers ('x-ms-request-root-id' and 'x-ms-request-id)
// to all dependency requests (within the same domain) to correlate them with corresponding requests on the server side.
disableCorrelationHeaders: boolean;
API Reference

ただ、デベロッパーツールで確認するとヘッダが追加されてない。検索したらIssueが上がってた。

github.com

クロスドメインの場合は動かないらしい。残念。
Java側の方も検索したら以下のIssueが上がってたんだけど...

github.com

Headers X-ms-request-id and X-ms-request-root-id are deprecated. Please do not use them for the fresh implementation. They can cause problems with Azure Storage REST API calls.
Also please support Request-Context header for http request and response. It is widely used for app-id propagation.
See http://apmtips.com/blog/2017/10/18/two-types-of-correlation/ and https://docs.microsoft.com/en-us/azure/application-insights/application-insights-correlation

x-ms...は使わないで、Request-Context使ってねってことみたい。ヒェェェェェ。
なんか沼にはまりそう。

バックエンド

フロントエンドから送ってきたデータをOperationIdとして使う場合、カスタムのInitializerクラスを実装して、ApplicationInsights.xmlに設定したWebOperationIdTelemetryInitializerと入れ替えれば良さそう。

実装方法は、WebOperationIdTelemetryInitializer を参考にすれば良い。operation_ParentIdは、setParentIdで設定できる...んじゃないかな?
フロントエンドよりは希望がもてそう。

ApplicationInsights-Java/WebOperationIdTelemetryInitializer.java at 2e18ce1d71d4a9b198aa2e0f608793956870a867 · Microsoft/ApplicationInsights-Java · GitHub

と、ここで体力と気力が切れたので、調査はおしまいにする。
さぁ、DEAD OR ALIVE Xtreme Venus Vacation やるぞー!!

バックエンド(Spring Boot)にAzure Application Insightsを入れてリクエストを計測してみた

Spring Bootって何?

もう書かなくてもいいんじゃないかな?? (誰に言われたわけでもないけど)

https://projects.spring.io/spring-boot/projects.spring.io

導入方法

前回同様、GitHubにあったSpring Frameworkのサンプルアプリpetclinicを使い、Azure Application Insights を使用した Java Web アプリの分析 | Microsoft Docs を見ながら導入した。 最初の一歩を開発元が用意してくれてるのありがたい。

petclinicはSpring Framework定番のサンプルアプリっぽい。コミュニティで色んな派生アプリを作っている模様。

github.com

コード

GitHubに置いてみた。

https://github.com/nobiinu-and/spring-petclinic-rest/tree/monitoring-request

変更点はここで確認できる。

https://github.com/spring-petclinic/spring-petclinic-rest/compare/master...nobiinu-and:monitoring-request

試行錯誤したところ

  • Application Insightsのログを出せるようにした
  • Application InsightsのInstrumentation Keyを外出しした

Application Insightsのログを出せるようにした

Application Insightsの設定ファイルに以下を加えれば良い。

    <SDKLogger>
        <Type>CONSOLE</Type>
    </SDKLogger>

思いつきだったのに、探すの結構苦労した...orz

Application InsightsのInstrumentation Keyを外出しした

環境変数 "APPLICATION_INSIGHTS_IKEY" で指定すれば、勝手に読み込んでくれるので、修正点はなし。

Application Insights SDK は、次の順序でキーを探します。
システムのプロパティ: -DAPPLICATION_INSIGHTS_IKEY=your_ikey
環境変数: APPLICATION_INSIGHTS_IKEY
構成ファイル: ApplicationInsights.xml

見えるようになったもの

ガイドにあるようなデータが取れてる。

f:id:couger:20171126133739p:plain

f:id:couger:20171126133744p:plain

残ってる課題

SQLとかの実行時間知りたい

Azure Application Insights における依存関係の追跡 | Microsoft Docsを見ると、SQLの実行時間なども分析してるんだけども...。追加の設定が必要なのかな?

Performance monitoring for Java web apps in Azure Application Insights | Microsoft Docs この辺が参考になりそう。Agentを別立てする必要がありそうなので、今回はパス。

出力しているログも分析したい

Azure Application Insights を使用した Java トレース ログの探索 | Microsoft Docsに書いてあった。 logbackの設定を変更すればいいらしい。

参考にしたページ

フロントエンド(Angular)にAzure Application Insightsを入れてページビューを計測してみた

Angularって何?

Angular Docs

Angularは、Googleオープンソースコミュニティで開発されているJavaScriptフレームワークです。 AngularJSと呼ばれていたバージョン1(AngularJS 1)から、バージョン2で大きく変更されて、以降はAngularと呼ばれています。 バージョン2時点では「Angular 2」と呼ばれることもありましたが、現在はAngularが正式名称です。
JavaScriptフレームワーク「Angular」新バージョン4の変更点と今後の展望 (1/3):CodeZine(コードジン) より引用。

会社のとあるチームの人たちが使ってるんだけど、最近モニタリングに取り組み始めて、Applicaiton Insightsを使ってる。
個人的にもやらないとなーと思いつつ、手がつけられてなかったので、ちょうどいい機会だからのっかった感じ。

導入方法

手頃なアプリがなかったので、GitHubにあったSpring Frameworkのサンプルアプリpetclinicを使い、Add Application Insights to an Angular SPA – Premier Developer を見ながら導入した。

petclinicはSpring Framework定番のサンプルアプリっぽい。コミュニティで色んな派生アプリを作っている模様。

github.com

マイクロサービス版もある!! Kubernetes + Istioの練習するときに使ってみよう :D

コード

GitHubに置いてみた。

github.com

変更点はここで確認できる。

Comparing spring-petclinic:master...nobiinu-and:monitoring-owner-list · spring-petclinic/spring-petclinic-angular · GitHub

試行錯誤したところ

  • webpackをインストールした
  • logPageViewの引数を指定した
  • Application InsightsのInstrumentation Keyを外出しした

webpackをインストールした

基本、インストールはREADMEの手順に沿って行う。
最後の ng serve でエラーが起きた(メモ忘れたので詳細がわからん)ので、npm install --save-dev webpack をして、webpackをインストールして解決。

logPageViewの引数を指定した

logPageViewはtrackPageViewをラッパーしたもの。
引数を指定しない場合、Application Insightsはページ名にWindowのタイトルを利用する。
サンプルアプリはページごとにWindowのタイトルが変わらないので、コンポーネントの名前を入れてみることにした。
コンポーネント(クラス)の名前は this.constructor.name で指定できる。

Application InsightsのInstrumentation Keyを外出しした

KeyをGitHubで晒すのもなぁと思った(というか、晒してたので慌てて削除した)ので、 Angular 4 で Connection String や Secret を Environment Variables から取得する - Qiitaを参考に外出し。

残ってる課題

全ての画面を対象にする

Add Application Insights to an Angular SPA – Premier Developer にも書かれてるけど、記載されている方法だとコンポーネントごとにコードを記述する必要がある。
コンポーネントの基底クラスを作って、そっちで処理しろって書いてあるんだけど、なんか面倒。

以下のような感じで、ルーティングの NavigationStart イベントを使っても処理できるかもしれない?
(画面名がコンポーネント名の代わりにURLになっちゃうんだけども)

export class AppComponent {

  constructor(router: Router, private myMonitoringService: MyMonitoringService) {
    router.events
    .filter((event) => event instanceof NavigationStart)
    .subscribe((event: NavigationStart) => {
      this.myMonitoringService.logPageView(event.url);
    });
  }
}

一応実装してみた。動いてはいる模様。

Comparing monitoring-owner-list...monitoring-using-router-events · nobiinu-and/spring-petclinic-angular · GitHub

ただ、この方法だとルートガードでキャンセルされた場合(実際に画面遷移しなくても)計測してしまう。
キャンセルされた場合の話を考えるといろいろ難しくなりそうなので、これで置いとくことにする。(別途、キャンセルしたことを通知すればいい気も)

Durationで計測されているのはどの処理なのか?

画面の切り替えは1秒以内で行われているんだけど、Durationで計測されてる時間は2秒以上かかってた。
ちなみに、バックエンドからデータを取ってくる時間は含まれていない(バックエンドの処理に細工して、5秒sleepさせたけど、その時間は含まれなかった)。
処理時間は参考程度にしておくって手もあるんだけど、なんかモニャモニャする。

参考にしたページ