この広告は、90日以上更新していないブログに表示しています。しゃべってきたので、その報告というか裏話というか。一度話したやつでした。発表が決まり、こちらはネタが思いついて登壇することになりました。無事通り、思惑通り?去年の初登壇と比べるとかなり楽な気持ちで発表に挑むことができました。(一応、大阪での発表の際にいくつか質問があったので、その分の加筆修正は入れていました)大阪での発表のときは、急いで話しすぎたため予定より大幅に時間を残してセッションを終了してしまうという失敗がありました。今回は時間配分を考え、なるべくゆっくり話すようにして時間通りに終わらせよう、というリベンジ的な目標がありました(大阪での発表もそうしとけよという話ではある)。結果は、5分残しの40分で終えられたので、目標は達成できたかなぁと思ってほっとしてます。やつは再演だったので、個人的にはこっちのほうが本番でした。発表枠が埋まっていてお蔵入りになっていました。枠で応募することにしました。含め両方とも当選したので、半年の充電期間を経て日の目を見ることができました。時間が無くて話すことはできませんでしたが、あのネタの実現にはかなり苦労しました。この苦労話はそれはそれで頭おかしいので、せっかくなのでこちらのブログ記事で補完したいと思います。ソースコードの収集!まずはなによりソースコードの収集が必要です。以下のようになります。'org.springframework.boot:spring-boot-starter-web'}当たり前ですが、必要なソースはこれだけではないです。推移的な依存関係の解決によって、実際は↓のライブラリが必要になります。(*)これらのソースを手で入手するのはどう考えても現実的ではないです。落としてくる仕組みを流用してソースコードを入手できないか調べたのですが、意外と直接的にそういうことができる仕組みはなさそうでした。キャッシュされているフォルダからソースコードをかき集めてくるタスクを作ることで解決しました。}}コンパイルが通らない!ソースコードが入手できたので、これで解決かと思ったら、そうは問屋はおろさないです。推移的な依存関係の解決で入手したソースコードをコンパイルすると、必要なソースがないためコンパイルが通りません。クラスが入っているため、実行時には使用しなくても様々なライブラリと依存しています。それ以外にも、依存するソースがないためコンパイルエラーになるソースは多くありました。それらを全て洗い出して、必要なソースコードを集めるのは大変すぎます。なかに置くようにしました。ファイルになっています。ファイルは1対1の関係になっていません。その辺も考慮したうえで、ファイルの差し替えが必要でした。ファイルに差し替える必要があるわけですが、コンパイルエラーの数が多いと一度のコンパイルで全てのエラーを出し切ることはできませんでした。回くらい繰り返す必要がありました。ファイルが存在しない、というライブラリが存在したからでした。ファイルを配置するようにしました。スローする実装クラスが用意されています。ソースコードが配置されています。}}こちらは処理が実装されています。依存ライブラリのソースコードをかき集めるときに、いったん1か所(フォルダ)にソースコードをかき集める処理をしていました。スローされてしまいました。ソースが優先されるように調整することにしました。ソースコードの圧縮!ソースコードにはコメントやスペース、改行という無駄な記述が多くあります。これを除去するために、最初はソースを1文字ずつ読み込みながら不要と思われる部分を除去する処理を実装していました。いう構文解析ライブラリを使用することにしました。修飾子を確実に削除できるようになりました。標準で用意している仕組みだけでは足りませんでした。ソースに戻すためのクラスが用意されています。これにはインデントサイズや改行文字を指定する方法が提供されています。それぞれに空文字と空白スペースを設定することで、インデントと改行を消すことができます。細かいスペースの除去はうまくいきません。後ろのスペースは削除できません。継承して除去可能なスペースを全て除去する独自のクラスを作成することにしました。ファイルを作成することができました。作成するための手順を何度も手で実行するのはあまりにも大変なので、ツール化して簡単に実行できるようにしています。容量を減らすために四苦八苦した話でした。ところで、今回会場が一方通行になったことで前回までの混雑が驚くほど解消されてて衝撃的でした。