プログラミングHHVM Hack 執筆しました
こんにちは、5月なのに真夏のように暑いですね🌞本日発売のプログラミングHHVM Hackという本を執筆しました
以前、Hackがリリースされた直後に出した本よりもボリュームが多く300ページ近い量になっていますのでHHVM Hackに少しでも興味がある方は是非手にとって読んでみてください。 そして、そろそろPHPからHHVMに移行してみようかなという方は是非実践してみてください。
Amazon Kindle
- 作者: 米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2017/05/22
- メディア: Kindle版
- この商品を含むブログを見る
Gihyo Degital Publishing
書籍目次
1章 プログラミングHackとその環境構築 1.1 プログラミングHackとは 1.2 環境構築 2章 Hackの特長と構文 2.1 Type Annotations(型注釈) 2.2 Type Inference(型推論) 2.3 Casting 2.4 Refining 2.5 Advanced Rules 2.6 Summary Table 3章 Hackの機能 3.1 Collection 3.2 Shapes 3.3 Tuples 3.4 Enums 3.5 Generics 3.6 Type Aliase 3.7 Lambda 3.8 Callable 3.9 Async 3.10 XHP 3.11 Attributes 3.12 終わりに 4章 ツール 4.1 hh_server 4.2 hackificator 5章 Extension 5.1 PHP and C++ extensions おわりに
HHVM Hack
これからHHVM Hackがもっと盛り上がっていったら良いなと思っていますので、PHPの皆さんと一緒にHHVM Hackも盛り上げていきたいなと思います。よろしくお願いします。
Java開発におけるErrorProneのススメ
こんにちは、今シーズンのNBAもGSWの試合は全試合観てる米林です🏀 今年は毎試合満員御礼のOracleアリーナに行って観戦したいなぁと思いつつカリフォルニア州オークランドの人たちはOracleがデータベースの会社って知ってるのかどうか毎回気になっています🏀
うちの会社ではJavaの開発において、Error Prone
を積極的に取り入れている。
その理由はCTOのmopemopeが入れろって怖いから、ただそれだけである。
実際のところ導入して損は無いので皆さんも是非導入を検討して頂きたい。
Error Prone とは
Error Prone
とはGoogleが公開していて、githubに記載されている説明のとおり “Catch common Java mistakes as compile-time errors” そのままである。
コンパイル時にエラーが起きそうなところははじいてしまおうという素敵なものだ。
Error Prone
は Bazel, Maven, Ant, Gradle で動作します。
Java開発者の方に馴染みのある FindBugs のようなものだと思ってもらえると理解は早いと思います。
現在、私が開発しているプロジェクトでは Gradle に組み込んで IntelliJ から実行していて Error Prone
のエラーをクリアしないと実行が出来ないため、エラーを直さないと CTO に怒られる以前に実行出来ないためエラーがある状態では業務に支障をきたしてしまいますので強制的にエラーは排除する必要があります😢
インストールなどは公式ドキュメントを見てください。イマドキのJavaの開発であれば、ほぼ Gradle プロジェクトで開発されていると思うので、Gradleに組み込んで実行するまでは3分もあれば確認出来るかと思います。私が自身で作ったプロジェクトに組み込んだ際には既存の build.gradle に以下を追加しただけです。
apply plugin: 'net.ltgt.errorprone' repositories { mavenCentral() } configurations.errorprone { resolutionStrategy.force 'com.google.errorprone:error_prone_core:2.0.14' }
bugpattern
バグパターンはエラーや警告などいくつかに分かれています。 こちらにバグパターンが一覧化されています。そこそこ数が多いですが、色々みていくと自身非常にためになったのでJava開発者の皆さんは是非みてみてください。
バグパターンは、それぞれのサンプル毎に Positive examples
と Negative examples
があります。英語って難しいですね、どっちが正しいのか最初理解に苦しみました。
バグパターンの一例ですが、ArrayToStringというものがあり、配列をそのまま toString
している箇所はNGとなります。
githubにexampleを置いておくのでcloneしてGradleでbuildしてみてください。エラーが以下のように表示されるので、Main.java を直しながら確認してみると分かりやすいと思います。
$ git clone https://github.com/yone098/error-prone-example.git $ cd error-prone-example/ $ gradle clean run :clean :compileJava /Users/yone098/p/error-prone-example/src/main/java/example/Main.java:17: エラー: [ArrayToString] Calling toString on an array does not provide useful information System.out.println(nameArray); ^ (see http://errorprone.info/bugpattern/ArrayToString) Did you mean 'System.out.println(Arrays.toString(nameArray));'? エラー1個 :compileJava FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Compilation failed with exit code 1; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 5.081 secs
custom plugin
plugin としてカスタムチェックを追加することが可能です。 BugCheckerを継承して、MethodInvocationTreeMatcherを実装しプラグインを作成します。
@AutoService(BugChecker.class) // the service descriptor @BugPattern( name = "MyCustomCheck", // ... ) public class MyCustomCheck extends BugChecker implements MethodInvocationTreeMatcher { @Override public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState state) { // TODO: } }
Gradleで利用するには
configurations { annotationProcessor } dependencies { annotationProcessor project(':custom-checks') } tasks.withType(JavaCompile) { options.compilerArgs += [ '-processorpath', configurations.annotationProcessor.asPath ] }
詳しくは、Plugin Checksをチェックしてください。
最後に
Java開発している方には是非、自身のプログラムを ErrorProne
で一度チェックしてみては如何でしょうか?
そして、株式会社Abbyでは絶賛開発者を募集しています。現在、募集しているプロジェクトでは CTO のもとで一緒に楽しく開発出来ますし、もちろん一緒に ErrorProne
も見守ってくれます。
気軽にtwitterやFacebookなどで声かけてください。そして一度弊社まで遊びにきてください!よろしくお願いします!
絶賛、社員募集しています😀Java + libGDX でのクライアント開発、サーバサイドは Go で開発します。web 開発は vue.js を使ったりしています。興味のある方は、まず弊社まで遊びに来てください🐋🐋🐋
— 米林 正明 (@yone098) 2017年1月12日
2016年 振り返り
クリスマスゲームでGSWが負けてイライラマックスのyone098です🏀 今年も残り僅かなので2016年を振り返ってみたいと思います。
9月
9月には最後の Seasar Conference
が行なわれました。OSS
を通じて多くの人と知り合えた Seasar
には大変感謝しますし愛着があるプロダクトだっただけに寂しい思いもあります。ありがとう Seasar
10月
開発した新しい箱庭ゲームのリリースがありました🐻🐻🐻 クレジットに会社名やメンバーの名前を見ると毎回嬉しい気持ちになります。
今回もクライアントは Java
で libGDX
を採用し、サーバーは Go
で作りました。
会社
順調に優秀なメンバが増え平均年齢も年々下がり、とても嬉しく思っています。箱庭ゲーム開発のノウハウを生かして引き続き質の高い箱庭タイトルを開発しながら新しいチャレンジを続けていきたいと思います。
箱庭ゲーム開発以外では海外展開のシステム開発に携わっており、プロジェクトメンバが海外出張に行く機会が増えたことも新しいチェレンジにつながっています。こちらも引き続き頑張っていきたいです!
会社のメンバには今年も感謝の気持ちで一杯です。来年もよろしくお願いします!!!