豆無日記スマートフォン用の表示で見る豆無日記この広告は、90日以上更新していないブログに表示しています。2.5.0から、groovy.transform.AutoFinalというAST変換が追加されていたらしい。King氏のツイートを目にして初めて知った。気になったので早速試してみた。@AutoFinalなし。ODA"普通に実行できる。クラスに@AutoFinalアノテーションをつけてみる。reassignedと、コンパイルエラーになった。いうように、@AutoFinalをつけると、AST変換によって全てのコンストラクタ引数、メソッド引数、クロージャ引数に暗黙のfinalが付与されて、コンパイルチェックされるようになる。これはいいかもしれない。Oda"は普通に実行できる。プロパティは再代入可能なままなので注意。プロパティを再代入不可能にするには、groovy.transform.Immutableという前からあるAST変換を使えばOK。簡単に不変オブジェクトにできる。プロパティ定義順にしたがって全部受け取るコンストラクタが自動生成される。明示的なコンストラクタを実装するとエラーになる。Personコンパイルエラーではなく、実行時に例外が発生する点がちょっと違う。markdownはじめに久しぶりのブログ記事です。Calendarの13日目として書いています。昨日はきょんさんによるGroovyのAST変換事情で、明日もきょんさんの予定です。QiitaGaidenとは?数年前にGaidenというドキュメント作成ツールひっそりとリリースして、弊社の社内ではそこそこ活用していたりします。特徴は、↓という感じです。*1Gaiden自体のホームページもGaidenで生成しています。ちなみに、拙作のGroovyServのホームページも同じくGaiden製です。Markdown)でさえも相当シンプルなので、そこそこの分量のドキュメントを執筆するにはMarkdownの記述力だと不足ガチかもしれません。その点、Asciidocはかなり機能がリッチなので、昨今、人気が高まってきている感じがあります。個人的にはMarkdownのプレーンテキストフレンドリなシンプルさが好きなので、なんとかMarkdownで書きたいわけです。Filtersの出番です。Filters簡単にいうと、簡単なGroovyコードを書くだけで、自由にシンタックスを増やしたり拡張したりし放題できる仕組みです。以下の3つのタイミングで自由に介入して、自由にテキストが置換できます。バージョンを設定ファイルに外だしして、ビルド時に置換するconfig.groovyに、以下のように記述するだけです。beforeに代入したクロージャの戻り値のテキストが次のフェーズ(この場合はMarkdowのレンダリング)に渡されます。}}あとは、Markdownで以下のようにVERSIONという文字を使ってドキュメントを書きます。このドキュメントのバージョンはVERSIONです。buildを実行すると、生成されたHTMLドキュメントではこのドキュメントのバージョンは1.0.0です。バージョン番号が展開されます。Filtersが相当便利なので、ドキュメントプロジェクトごとに色々フィルタ実装を追加しまくっていると、汎用性の高いフィルタができたりして、他のドキュメントプロジェクトでも同じフィルタを利用したくなってきます。Extensions形式にしてみましょう。言っても大したものではなくて、config.groovyと必要なリソースを特定のディレクトリに放り込んだだけの構造です。先ほどのサンプルのように他のリソースが不要なら、次のようにとてもシンプルな構造になります。}}先ほどのサンプルからだと、以下の3手順で移行できます。extensions/expandVersionディレクトリを生成する。直下のconfig.groovyをextensions/expandVersion配下にコピーする。extensions/expandVersion/config.groovyを編集して、必要なfilters以外のソースをすべて削除する。Gaidenはexntensionsディレクトリ配下の各ディレクトリの中のconfig.groovyも順番に評価してくれるので、先ほどと全く同じように動作します。Extensionsで実現してみましょう。Markdownの良いところはプレーンテキストとしてみてもそこそこ良い感じに読める、という点なので、そこは譲れません。Extensionsを作る必要があります。ここでは、以下のようなシンタックスを導入してみます。title.いかがでしょうか。個人的にはそんなに醜くないし、普通のMarkdownとしてレンダリングされた結果としても割と良い感じなのではないかと思いますが、最終的には個人の主観にお任せします。あとは、これをビルドすると上の画像のようなレンダリング結果が得られるように置換ロジックを書けばOKです。Admonitionになります。filterの実装はこんな感じです。}}なお、CSSファイルもassetsとして追加してあります。config.groovyNOTEだけではなく、など複数種類に対応してたり、一行でシンプルに書いたり、タイトルをつけたり、などそこそこリッチな感じです。詳しくはREADMEを読んでいただければ、使い方やサポートするシンタックスなどがわかるかと思います。個人的には、これを大変便利に色々なドキュメントプロジェクトで使いまくってます。おわりにオレオレシンタックスを増やしたら、学習コストやメンテナンスコストが大変なのでは、という懸念もあるでしょうが、あーあー聞こえない聞こえない。なく、まあ節度を持って活用すれば良いんじゃないでしょうか。いうわけで、巷では非常にレアなGaiden活用テクニックをお送りしました。Qiita*1:なお、現在のバージョンではWindowsのGaidenラッパーによるインストール時にファイルパーミッション関連のエラーが発生してしまいますが、インストール自体は成功してるはずなのでエラーにめげずにもう一度Gaidenコマンドを実行すると動くんじゃないかと思います。レポートのリンクをまとめておきます。javaone2017さて、帰国日。2017レポートも今回で完結です。観光ウォーキング今回の往復空路は羽田発着JAL便。SFO発なので、飛行機の時間まで結構時間があります。ホテルのチェックアウトリミットは12:00ですが、ギリギリまで引きこもってるのも勿体無いですし、今回は全然観光してなかったので、チャイナタウン経由のフィッシャーマンズワーフ往復ウォーキングを強行してみました。ユニオンスクエアの横、ケーブルカーの通る道路を北に向かいます。時々道端にウ○コがあるので注意が必要。途中にある公園にある綺麗な建物。フィッシャーマンズワーフ到着。西の方に歩いて行って、お昼はIN-N-OUTで。激混みでしたが、なんとかゲット。チーズバーガー美味しいです。IN-N-OUTの待ち時間でだいぶ時間を消費したので急いで戻ります。なんか上の方を指さしてる家族連れがいたので、つられて見たら飛行機パラシュート部隊らしき何かがクルクルしてました。1歩いた軌跡はこちら。現地に溶け込むスキル高い方とのご挨拶ホテルに戻ってスーツケースを受け取って空港へ向かおうとホテルを出たところで、通りの反対側で上下スウェット姿でタバコを吸っている現地の人に「ナカノサーーン」と声をかけられましたが、よくみたら寺田さんだったのでおつかれさまのハグをしてお別れしました。一発逆転のコイン消費行アメリカのコインですが、種類も多いし、大きさと価値が比例してないし、数字が書いてないやつもあるし、書いてても小さくてみづらいしで、いつみても全く使える気がしません。今回の滞在ではクレジットカードをメインに使いましたが、どうしても現金が必要な場面では紙幣を使っていたので、やはりそれなりに小銭ができてしまいます。(うろ覚え)に対して、紙幣で$8と5セントコインを出してみましたが($8.05)当然たりず2、店員のお姉さんに「この中から選んでくれ」とコインを一通り出してみたら、よりによって一枚だけ紛れ込んでいた1ドルコイン3をピックアップされてしまいました($9.05)。これがジャラジャラとコインで帰ってきます。使うどころかむしろ増えました。次のコイン消費チャンスは、クリッパー(SUICA的なやつ)への帰りのBART代チャージ。BARTの券売機が史上稀に見るひどいUIなのと、後ろに並ぶ人たちのプレッシャに耐えかねて、適当に入れてチャージしたら、なんとお釣りで大量のコインがジャラジャラと出てきてしまいました。実は焦って1枚多めに1ドル紙幣を入れてしまったのですが、チャージ指定した金額をさっ引いた額が全部小銭で帰ってくるというミラクル。合計1ドル以上のクォータ(25セント)コイン+αがジャラジャラと釣り銭口に溢れ出して泣きそうです。2017年10月6日もうダメかと諦めてましたが、飛行機のチェックインが早く終わり、ふと見ると保安ゲートの前にコーヒー屋さんがあります。ここで可能な限りコインでコーヒを買えれば勝つる。正直なところ店員さんにとっては迷惑な話ですが、レジも空いてたし、先に「全部コインで払ってもいいですか?」と聞いたら笑顔でOKしてくれたので大丈夫なはず。結論としては、手持ちのコインをほぼ全部つかってコーヒー一杯の購入に成功しました。あとで調べたらdime=10セントでした。何度調べても覚えられない。総括さて、今回のJavaOne全体をざっくりまとめてみます。upしてからテスト」みたいなやり方を全部テスト側からコントロールできるっぽいので便利そう。Microservices/Container/Kubernetesとりあえずこの辺に関するセッション数はかなり多かったし人気だったし、やたらと単語が登場したので今ホットらしい(今頃かよ的なツッコミもあるとは思うけども)Groovy/Grails今年はGrailsのセッションはありませんでした。いうか、Webアプリケーションフレームワーク自体のセッションがほとんどないです。ふつーのWebアプリフレームワークについては、もう一通り落ち着いた感じがしますね。Groovyの方は、タイトルに冠したセッションは3つで、そのうち2つ聞きましたが、セッション内容については前日までのレポートの通りです。Java言語系ではダントツだった気がします4。Android勢の基盤を確固たるものにしつつ、この勢いでどこまでいけるのか健闘を祈っております。今回は大山さん・櫻庭さんとご一緒させていただくことが多くて、美味しい食事が楽しめました。一人でレストランとかバーとかにいくのが難しいハート弱い系なので、大変助かりました。あと、色々ごちそうさまでした。今回ビールについては、IPAを中心に攻めましたが、いずれもたいへん美味しかったです。英語6年ぶりのJavaOneは相変わらず楽しかったですが、自分の英語力のアレさ加減に打ちのめされて帰るという定番コースは今年も覆せませんでした。以前よりも聞く方はだいぶマシになってきたなぁという実感はありますが5、ある一線を越えないと五十歩百歩感が否めないというか、「英語聞けますよ枠」に行くにはまだまだ努力が必要です。しゃべる方はむしろ全然練習してないのでまあボロボロです。今回、JavaOneのレジストレーション後にもらえるオマケが、毎年恒例のリュック&Tシャツ、の2つだけでなんだか寂しい感じです。JavaOneとして独立した会場&野外ラウンジがないとか、食事と一緒にドリンクがつかないとか、コーヒーとドリンクが午後1回の配給だとか、無限ビールが一晩だけとか、経費削減感がそこかしこに感じられて若干不安な気持ちが頭をもたげます。ランチの味は以前の記憶よりもマシになってる感じがしました。サンドイッチ系はパンがごつくてつらいこと以外は味は普通に楽しめた気がします6。さいごにというわけで、総評として大変楽しいJavaOneでした。来年も行きたい!skrbさん情報により訂正↩$8.5(0)になるかと錯乱してました。↩1ドル紙幣が存在するくせになんで1ドルコインが存在するのか...。↩なお、"Scala"をタイトルに含むセッションは5件。ちなみに"Gradle"は6件。相対的に以前がどんだけ酷かったかという話もありますが。↩ただし、最終日に食べたキムチ入りの謎のロール状食物は食べられなくはないものの味はアレでした。javaone2017いよいよ正真正銘JavaOne最終日です。WestからMariottホテルに場所を移して、なんとなくもう終わるんだよ感が漂ってきます。今年は最終日のランチチケットがついてなかったので、参加者同士で「コスト削減でランチ配給もないのか!」などとぼやいていたら、単にチケットのモギリがなくなっただけでブツはきちんと配給されました。