タグ

ブックマーク / uehaj.hatenablog.com (79)

  • Grails&React CRUDビュー生成2017 〜Reactベースの管理画面構築ライブラリAdmin-On-Restの紹介〜 - uehaj's blog

    これはG*Advent callender 2017の24日の記事です。 昨日23日の記事は mshimomuさん、明日25日の記事は未定です。 完全に一年ぶりの記事です。みなさん、いかがお過しでしたでしょうか。今年Qiitaとかに書いた記事を別にまとめましたが、わたしはReactを良く書いてた一年でした。 記事のテーマは以下の2つです。 GrailsのWeb APIサーバのCRUDビューをいかに簡単に作るか RESTfulサーバ/任意のサーバに対する強力なダッシュボード・管理コンソール開発用ReactコンポーネントライブラリであるAdmin-On-Restの紹介、使い方 もくじ もくじ 去年までのあらすじと今年の方針 Admin-On-Restとは何か Admin-On-Restのデモ動画 Admin-On-Restの特記すべき点 REST Clientによるデータソースの抽象化 Ad

    Grails&React CRUDビュー生成2017 〜Reactベースの管理画面構築ライブラリAdmin-On-Restの紹介〜 - uehaj's blog
    nobusue
    nobusue 2017/12/24
    Admin-On-Rest便利そう
  • Grails React Scaffoldを目指すざます - uehaj's blog

    これはG*Advent callender 2016の記事です。 前日は@Ziphilさんの記事でした。明日は@ hikariruさんの記事です。 去年のG*Advent Calendarでは、ブログではReact Meets GrailsReactはエンタープライズSPAの夢を見るか?〜 - uehaj's blogと題して、バックエンドを「GrailsのRestサーバ」+「React SPAによるフロントエンド」という組合せをボイラープレート(雛形)として実装してみました。 今年もこの路線を拡充してみます。 背景 解決策 作ったもの 実行方法 去年からの進展 特徴 つまりどういうこと? JSONSchemaとは 今後やりたいこと まとめ 背景 GrailsにはScaffold機能、すなわちCRUD操作を行なうためのWeb画面の自動生成機能があり、確かに便利なものではあるのですが、

    Grails React Scaffoldを目指すざます - uehaj's blog
  • Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ - uehaj's blog

    TL;DR JDK(tools.jar)中、com.sunパッケージ配下に、javacが内部的に使っている「com.sun.tools.javac.util.List 」が含まれており、これは不変データ構造としてのリストのように(Cons セルベースのリストのように)利用できる。 はじめに ScalaのコードをGroovyやJavaなどに移植する際に、いつも悲しい思いをするのが不変データ構造に基づいたリスト処理ライブラリが見あたらない、ということでした。JDKの標準コレクションライブラリには、Scalascala.collection.immutable.Listのような、不変データ構造を用いて実装されているリストがありません。 ここで言う不変データ構造に基づいたリストとは、JDKのjava.util.Collections.unmodifiableList()等で取得できるような変更禁

    Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ - uehaj's blog
  • Groovyをソースからコンパイルすると♪ - uehaj's blog

    groovyのソースをとってくるじゃろ。 % git clone https://github.com/apache/groovy.git コンパイルするじゃろ。 % cd groovy % ./gradlew installGroovy すると、頭の中であの音楽が鳴り始める♪

    Groovyをソースからコンパイルすると♪ - uehaj's blog
  • (Babel 5における)ES6のモジュールを解説してみた - uehaj's blog

    警告 以下でのモジュールの説明はトランスパイラであるBabel 5,6で動作を確認した振舞いについての記述です。2015年11月現時点で、ECMAScriptのモジュール仕様策定範囲は、来の全体範囲のまだ一部であるとのことです。その状況でのBabelの実装は、良く言えば先行的、悪く言えば将来そのままである保証はなく、現時点でも他のES2015をサポートする処理系との間での相互運用の保証はありません。また、現時点でBabelのモジュール機能を使うこと自体にリスクがあるという意見もあります。CommonJS側からBabelが生成したモジュールをCommon JSモジュールとして読み込もうとしたときの互換の問題として、Babel5で可能だったことがBabel6では利用不可になる、といったことも起きているようです。 そこらへんを含めて解説されているこちらの資料が参考になります。 (2015/11

    (Babel 5における)ES6のモジュールを解説してみた - uehaj's blog
  • 今こそッ、始めようGrailsブートキャンプ!!!! - uehaj's blog

    以下のイベントが予定されています。 Grails3対応のGrailsブートキャンプです。 Grails3というのが出たタイミングで、ちょっと取り組み直しみよう、という向きに最適です。 jggug.doorkeeper.jp 山さん(id:yamkazu)NTTSOFTが講師です。 ご興味があればぜひご検討を。

    今こそッ、始めようGrailsブートキャンプ!!!! - uehaj's blog
  • GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog

    この両者は、似ているようでいて、基的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型のインスタンス MethodHandle, invokeDynamic.. 型推論の根拠 Closure<T>のTで返り値、@ClosureParamsで引数 FunctionalInterface(SAM型) 記法 { 引数 -> 体 } { 体 } {-> 体 } (引数) -> { 体 } (引数) -> 式 () -> { 体 } 暗黙の動的なthis delegateにより実現 - 性能 ローカル変数をenclosingするため間接参照にするためのオーバーヘッドあり 性能上のオーバーヘ

    GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog
  • Grails/Groovyのサイトを構築している、名もなき静的サイトジェネレータ - uehaj's blog

    Grails/Groovyのサイトは、静的サイトジェネレータで作成されています。Groovyサイトは去年ぐらいからそうだったのですが、最近Grailsもそうなりました*1。 しかしこの静的サイトジェネレータの名前がわかりません。ソースコード上は、単に「generator/SiteGenerator.groovy」で、独立したgithub projectもありません。groovy-websiteやgrails-static-websiteというプロジェクトの一部としてそれぞれでカスタム化されて機能しているというだけです。 SiteGenerator.groovyは139行ぐらいでやってることもシンプルで自明なので、独立にするまでもない、ということでしょうか。処理の実行はgradleタスクでguild.graldeに書いてあります。 gradle genrateSite こんな感じでsite/

    Grails/Groovyのサイトを構築している、名もなき静的サイトジェネレータ - uehaj's blog
    nobusue
    nobusue 2015/02/27
    これ便利ですね
  • Grailsのファイルアップロードは一行も書かなくていい - uehaj's blog

    (追記) grails3ではscaffoldの仕様が変り、以下の内容に加えて、create.gspのg:upload..を g:uploadform..に修正する必要があります。 Grailsで、ちょっとファイルアップロードの処理でもするか、と思って調べたら、ドメインクラスにbyte[]メンバを書くだけで、scaffoldされるViewでは対応するフィールドに対してファイルアップロード用のFORMが生成されてて、アップロードするとファイル内容がフィールド内容に格納されて、これはORマッピングされているものだからそのまんまDBに格納されてしまうのですね。ポルナレフ風に言うと、 何を言ってるかわからないと思うが、ありのままを書くぜ。 「byte[]フィールドを書いたと思ったらファイルがアップロードされててDBに格納されていた」 超高生産性とかそんなちゃちなもんじゃねえ、もっと恐ろしいものの片鱗

    Grailsのファイルアップロードは一行も書かなくていい - uehaj's blog
  • enumに継承を! traitとenumの妙な関係、もしくはGrailsのドメインクラスの選択フィールドを国際化表示するのにtraitが便利 - uehaj's blog

    Grailsのドメインクラスにおいて、いくつかの候補の数値のいずれか、というフィールドを作成し、scaffoldで生成した画面からCRUD操作したいとします。 簡単なのは、こうですね。 class Domain { Integer something static constraints = { something inList:[1,2,3] } } しかし数値フィールドに量としてではなく個々の値にそれぞれの意味がある場合、たとえば、腹の状態を表すフィールドの値として、 1: はらぺこ 2:まんぷく 3:こばらがへった を表現するようなものだったとします。このとき、すくなくとも、Scaffoldの画面上では数値ではなく意味のわかる文字列で表示したり選択入力させたいわけです。しかしデータそのものを文字列にするのもDB上の表現をそうしたくないのでいやだとします*1。 ということでenumの出

    enumに継承を! traitとenumの妙な関係、もしくはGrailsのドメインクラスの選択フィールドを国際化表示するのにtraitが便利 - uehaj's blog
  • 実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog

    これは2014年のG*アドベントカレンダーの第23日目の記事のつもりでしたが、12時すぎてしまいましたorz。 HaskellやScalaRustには型クラスという言語機能があり、個人的感想として、理解が難しかったものの一つです。いわく、インターフェースのようなもの。いわく、オープンクラスのようなもの、など。 わからなければ作ってみるのが一番です。なのでGroovyで型クラスを実装してみました。 ソースはこちら。 ただし実用的なものではなく、学習用です。また実装したのは概念のコア部分のみで、言語によって詳細は異なることに注意ください。 型クラスとは何か 型クラスとは、多相型・ジェネリクス型の型引数(仮型引数)に対して、「ある型に対して可能な操作の集合」を、制約として与え、またそれらの操作が可能であるという保証を、「クラスの継承関係」とは無縁の方法で与えるものです。 別の言い方で言うと、「

    実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog
  • Grailsで、tomcatを起動するというだけの目的でファンクショナルテストを設定する方法 - uehaj's blog

    Grailsでコントローラの試験を、モックを使わず実際の通信を使って試験したいケースがある。たとえば、Rest APIを開発する場合、Rest APIはブラウザを使用しなくても簡単に呼び出せるものなので、ユニットテストがしたいです。もちろんGrailsにはコントローラをモックで試験する機能があるが、rest APIを呼び出せば済むものを、偽物ですます必然性があまりないと個人的には思う(もちろん試験実施時のtomcat立ち上げ下げのための実行時間を短縮したい、などの関心はありうるが)。 このためにはファンクショナルテストを実行する必要がある(unit/integrationではtomcatはたちあがらない設定になっている)。しかし、Grailsでは、ファンクショナルテストは単にtest/functional配下にテストコードを置くだけでは実行できず、一つなんでもいいからファンクショナルテスト

    Grailsで、tomcatを起動するというだけの目的でファンクショナルテストを設定する方法 - uehaj's blog
  • Dockerを使ってGrails開発 - uehaj's blog

    Grails開発でdockerを使用するためのDockerfileを、備忘録兼ねて晒します。開発中に使うものです。運用用は、別のものになるでしょうかね。 onesysadmin/docker-grailsを元にして、Proxy設定を行い、いくつかの工夫をしております(プロキシ設定については、Dockerコンテナに透過的プロキシ設定とかをすれば不要なのかも)。 利点 Grails開発でDockerを使う利点は以下の通り。 準備が簡単。Grailsのインストールはもとより、gvmやJDKのインストールすらいらない。grails wrapperなどもいらないわけだ。 環境を汚さない。JDKのインストールをしなくてすむ、Postgresなどをコンテナに封入して連携する、などによる。 設定含めた開発時実行環境を開発メンバー間でシェアできる Dockerlinuxなので、開発環境windows、実行

    Dockerを使ってGrails開発 - uehaj's blog
  • PHPのようにGrailsを使う方法 - uehaj's blog

    GrailsアプリケーションではGSPのビューは以下の方法で表示できます(他にもあるかも)。 コントローラーアクションの結果として表示 renderで指定したビュー コントローラ名とアクション名から定まるデフォルトのビュー ビューを直接表示する URLMappingでURLパターンからビューを指定する しかし、「ビューだけ」の、GSPの集合だけで機能するサイトは作れません。JSPで言うと、JSPだけのServlet無しのWebサイト、あるいはPHPの埋め込みページだけで構成するようなサイトが作れないのです。 そうなのはおそらく意図的であり、それがWeb開発の黎明期にアンチパターンとしてみなされてきたので排除されているのでしょう。上記のような制約「GSPはコントローラからの画面遷移を経て表示される」があることのメリットは、GSP内で使用できるデータの由来を明確化できること、そして、画面遷移の

    PHPのようにGrailsを使う方法 - uehaj's blog
  • ヒアドキュメントと複数行文字列について - uehaj's blog

    「ヒアドキュメント」をなんで「ヒアドキュメント」っていうかを調べてみた。以下が参考ページ。 http://programmers.stackexchange.com/questions/143918/why-is-it-called-a-here-document http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%BF%E3%82%A4%E3%83%97%E7%AB%AF%E6%9C%AB#.22Here_is.22_.E3.82.AD.E3.83.BC わかったこと 上記の内容が正しいとして、読み取ったことは以下のとおり。 「ヒアドキュメント」は「"Here is" document」から来ている。 "Here is"は何からきているかというと、昔テレタイプ端末にあった「Here is」というキー。 「Here is」キーは何かと

    ヒアドキュメントと複数行文字列について - uehaj's blog
  • ペアワイズ法でSpockのテストデータを生成する - uehaj's blog

    (関連記事:http://uehaj.hatenablog.com/entry/2015/10/18/155107 ) JCUnitというすばらしいJUnitの拡張があります。 JCUnit ブログ JCUnit JCUnitではペアワイズ法もしくはオールペア法という手法でテストデータを生成します。ペアワイズ法というのは、試験対象コードに対するパラメタのバリエーションテストをする際に、より少ないテストデータの件数で、効率良くバグを発見できるというテストデータの選択技法だそうです。(オールペア法の記事) 折角の自動テストならば、テストデータも自動生成してしまおうと。しかし単純に総当たりだと、指数的にケース数が増えて手に負えなくなるので、統計学に基づいて、優れているとされている方法でデータを選択し実用的には十分なようにしよう、ということです。 JCUnitはJUnit4のRunner(@Run

    ペアワイズ法でSpockのテストデータを生成する - uehaj's blog
  • Groovy 2.4のgroovyshでは、defが効くようになった。 - uehaj's blog

    https://jira.codehaus.org/browse/GROOVY-6623 で対処されました。 % groovysh Groovy Shell (2.4.0-beta-1, JVM: 1.8.0_11) Type ':help' or ':h' for help. ------------------------------------------------------------------------------------------------------------------------------- groovy:000> def x = 3 ===> 3 groovy:000> x ===> 3 groovy:000> :set Preferences: interpreterMode=true groovy:000> x.class ===> class

    Groovy 2.4のgroovyshでは、defが効くようになった。 - uehaj's blog
  • SpockにおけるMock、Stub、Spyの違い - uehaj's blog

    テスティングフレームワークSpockで相互作用中心のテストをする場合、いわゆるテストダブルとして、MockとStubとSpyの3種類を使えます。それぞれの意味などを簡単に解説します。 Spock全体含め詳しい解説はこちらなどを参照ください。 Mockに関しては、id:yamkazu 氏によるこちらのJGGUG G*Workshopの資料も秀逸です。 Stubとは 最初に、Stub(GroovyStub)についてです。Stubは後述Mockの低機能版であり、具体的には「モッキングができないMock」がStubです。StubができることはMockでできるので、来Stubを使う必要はありません。モッキングしないことを明示したいなら、使えば良いでしょう。なお、Spock用語の「スタビング」とは別のものです(スタビングおよびモッキングについては後述)。 Mockとは Mock(もしくはGroovy

    SpockにおけるMock、Stub、Spyの違い - uehaj's blog
  • @BaseScriptアノテーションはscriptをインクルードするのに使えます - uehaj's blog

    Groovy 2.2以降、@BaseScriptアノテーションというのが導入され、Scriptの基底クラスを指定することができる*1ようになりました。 これは主目的としては、専用目的の便利機能追加・DSLの作成だと思いますが、単にscriptをインクルードするのにも使えます。 例えば、以下の「OtherScript.groovy」をクラスパスの通ったところか、あるいはカレントディレクトリに配置しておきます。 // OtherScript.groovy def methodOfOtherScript() { "i'm methodOfOtherScript1" } def methodOfOtherScript1() { "i'm methodOfOtherScript2" } println "this is otherScript!" a=3 これを呼び出す、mainscript.gro

    @BaseScriptアノテーションはscriptをインクルードするのに使えます - uehaj's blog
  • Groovyを勉強したい人に贈る、astprintコマンド - uehaj's blog

    今ごろ言うな、って話かもしれませんが、自分で2年ほど前にこっそり作っていて最高に便利だと思っているコマンド「astprint」を紹介します。 astprintの内容は以下のようにシェルスクリプトです。 #!/bin/sh groovy -e 'groovy.inspect.swingui.AstNodeToScriptAdapter.main(args)' $*やってることは"こちら"で紹介したAstNodeToScriptAdapterを呼んでるだけです。以下ようにコンパイルの途中経過が標準出力にテキストで出力されるので簡単に見れます。当便利です。 % cat hoge.groovy cat hoge.groovy trait FileNameIsHogeHoge { @groovy.transform.ForceOverride String getPath() { return "

    Groovyを勉強したい人に贈る、astprintコマンド - uehaj's blog