Saganを参考に、CSSとJavaScriptのminifyをしてみようとしたが、jQueryのminifyに失敗する。
使用していたのはgulp-uglifyの1.1.0。
2015/03/31
gulp-uglify使用時のエラー
Spring BootのIntelliJでのホットスワップ
ソースコードの修正に合わせて実行中のSpring Bootアプリケーションを自動的にリロードさせる方法(ホットスワップ)について。
基本的な方法はSpring Bootのドキュメントに書いてあるのだが、
実際に試してみて、bootRunの実行中に修正してもロードされず、困っていた。
このとき実は、bootRunをIntelliJ IDEA CE (14.0)のGradleビューのタスクをダブルクリックすることで実行していたのだが、これがいけなかった。
IntelliJのGradleビューからbootRunを実行してしまうと自動ビルドの対象外になってしまう。
IntelliJの設定でBuild, Execution, Deployment
> Compiler
の設定項目をよく見ると
Make project automatically (only works while not running / debugging)
と書いてある。
(=自動的なビルドは、実行・デバッグをしていないときにのみ有効)
つまり、Macならターミナル、Windowsならコマンドプロンプトなどで gradlew bootRun
を別で実行しておけば、IntelliJ自体はrunningでもdebuggingでもない状態なので、ファイルの保存時にコンパイル・ホットスワップしてくれる。
2015/03/29
Spring Bootでのフロントエンド開発
SpringにProject Saganというのがある。
spring.ioのリファレンスアプリケーションということらしい。
Spring Bootでのフロントエンド開発はサポートされているのかな?
と調べていたところで
https://spring.io/blog/2014/07/24/spring-framework-4-1-handling-static-web-resources
を見つけ、そこでProject Saganが説明されていた。
Bloggerでモバイル表示時に横スクロールが発生...
PageSpeed Insightsを使ってこのブログを色々改善しようと考えた。
それなりに改善したものもあるし、Bloggerを使っている限り難しそうなものも多いので諦めているものもあるが、その中で「なぜ?」というものがあった。
下記の警告。
コンテンツのサイズを表示域に合わせる
ページ コンテンツの幅が表示域に対して広すぎるため、水平方向へのスクロールが必要になります。ユーザー エクスペリエンスを向上させるためにページ コンテンツのサイズを表示域に合わせてください。
ページ コンテンツの幅は 360 CSS ピクセルですが、表示域の幅は 320 CSS ピクセルしかありません。次の要素が表示域から外れています:
要素「<div class="widget-content"></div>
」が表示域から外れています。
確かに、モバイルのエミュレーションで確認すると右側に余白ができており、横スクロールが発生している…。
2015/03/28
Spockのthenで使える表現
GroovyのテスティングフレームワークSpock Frameworkではthenの部分に合格条件を記述するが、一行で一つのbooleanを表現する必要がある。
JUnitのようにテストケース内に何を書いても良いフレームワークに慣れていると、どう書いていいかわからなかったりする。
以下に、thenに使えそうな表現をいくつか挙げてみる。
Gradle Pluginプロジェクトをマルチプロジェクトにするときの注意点
Gradle Pluginを作る際、シングルプロジェクト構成なら気にすることはないが、マルチプロジェクト構成にした時にartifactIdが変わってしまったのでその対策のメモ。
AndroidのGradleプラグインgradle-eclipse-aar-pluginを開発している時に起きたことだが、当初はシングルプロジェクト構成だったものを後からマルチプロジェクト構成に変更して問題が発生した。
以下のように、プラグインのプロジェクトに名前をつけてあげればいい。
rootProject.name = 'gradle-eclipse-aar-plugin'
include ':plugin', ':misc:samplelib'
// ディレクトリ構成上はpluginだが、別名を付ける
project(':plugin').name = 'gradle-eclipse-aar-plugin'
これをしないと、uploadArchives
タスクを実行した時に上記の例で言えばplugin
がartifactId
として扱われてしまう。
Spring Bootのアプリ内にパスワード生成タスクを追加
以前のエントリ Play Frameworkのアプリ内にパスワード生成プロジェクトを追加のようなことをSpring Bootで行う方法について。
上記エントリで書いたように、Gradleで簡単に定義できる。
暗号化方法は、Spring Bootでユーザ認証で書いたようにWebSecurityConfigurerAdapter
の継承クラスでnew StandardPasswordEncoder()
を設定している前提。
他のEncoderを使う場合はタスクの内容を適宜書き換えれば良いはず。
Spring Bootでユーザ認証
Spring Bootで(というかSpring Securityのような気もするが)
ユーザ認証を実装する方法について。
とりあえずハードコードで、という方法は見つかるのだが
- DBにユーザ情報を格納し
- ID以外のユーザ情報にもアクセスできるようにする
という場合の方法が見つからず苦労したので記録しておく。
Play Framework 2.3をJavaで使うときに困った話(凡ミス)
Play Framework 2.3.8を使ってサンプルを作っていた時、
チュートリアルを参考に進めていたつもりだったのだが
Viewなど至るところでplay.api.*
が参照されてしまい
クラスが見つからないエラーが多発した。
てっきりJavaはもうサポートされていないのかな…と
思ってしまったが、単なる凡ミスだった。
build.sbt
で以下のようにPlayJava
プラグインを使用するように設定すれば良いだけのこと。
lazy val root = (project in file(".")).enablePlugins(PlayJava)
これを、PlayScala
プラグインを適用していたせいで上手くいかなかったのであった。
恥ずかしい話だが、誰かの役に立つかもしれないのでメモ。
Play FrameworkのCustom Field Constructorを作る
Play Framework (2.3.8)では、Scalaでテンプレートを書くようになっているが、以下のようなフォームを作りたい場合に@helper.form
でフォームを作ると<dd>
タグなどでレイアウトされてしまい思うようにならない。
そこでCustom Field Constructorを定義する。
Play FrameworkでSQLで初期データ投入する方法
Play Frameworkでは、EBeanを使い
YAMLで初期データを書くようだが、
SpringのようにSQLファイルで初期化したい場合。
Scalaだとanormが使えるようだが、Javaだと以下のような感じに作るしかなさそう。
Play Frameworkは2.3.8。JavaはOracle JDK 7。
Play Frameworkのアプリ内にパスワード生成プロジェクトを追加
Webアプリケーションのユーザをテーブルで管理する場合
MySQLなどのDBで、SHA2()
関数などを使ってパスワードを変換しても良いのだが、プログラム側で生成するとした場合は開発中のテストユーザのパスワードを生成するのに困る。
Play Frameworkの場合はBCrypt
を使う例を見かけたので
これを使うタスクをSBTで定義できたら良いのかな、と考えた。
…が、結局(知識不足なためだろうが)うまくできずサブプロジェクトとして用意して解決できたのでそのメモ。
(Play Frameowrk 2.3.8, Java 7)
2015/03/27
Webアプリケーションフレームワークを調べてみる
最近、Webアプリケーションフレームワークを使ってみながら比較している。比較、といっても深い考察ができているわけではなく素人レベルで色々試しているだけ。
TODOアプリケーションという同じ題材を、複数のフレームワークを使って実装してみて、実際に開発してみるまでの入り易さや開発のし易さ、等々を肌で感じてみよう、という取り組みをしている。
https://github.com/ksoichiro/todo
現在は、Spring BootとPlay Frameworkを使ってみたところ。
(なぜこれ?というのはさておき)以下、雑感。
総じてPlayが良さそうな感じに見えてしまうが、素人意見であり、どちらが絶対に良いとか悪いとかの話ではなく単なる感想なので注意。
2015/03/26
IntelliJ IDEA 14.1でのScala Plugin
IntelliJ IDEA 14 CEを開くと、アップデートがあると表示されていたので14.1をインストールしてみた。
が、Play frameworkのプロジェクトを開いてみるとScalaを認識しなくなっていた。
そこで、Pluginを再インストールしないとダメなのかな?と思いPluginsを確認してみると、Scala Pluginのアップデートがある、という表示になっていた。
14.1向けにアップデートがあったのだろうと思いUpdateしてみると、Updateの表示が変わらず残っている・・・。
仕方なく、諦めて 14.0 を再インストールして使うことにした。
やはり、IDEのバージョンアップは慎重にやらないとダメだな。。。
再開
今回は、ここ1年くらいを少し振り返り、テクニカルな内容ではなくアウトプットに関することをだらだらと書く。
Qiitaに投稿するようになったこともあり、最近すっかりブログを書かないようになっていたが、どうしてもQiitaに投稿しようとすると完成度を上げてから、とか思ってしまい、アウトプットしにくくなっていた。(元々このブログに頻繁に書いていたわけでもないが)
一方、ソースコードに向かう時間を1日一回は作ろうと思っていて、ちょうど1年前くらいからGitHubに1日1回以上を目標にコミットするようにしてきた。
なぜ始めたかというと、スポーツでの練習と同じ感覚で、継続的なトレーニングが必要だと思ったから。