タグ

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

  • ■ - uehaj's blog

    Advent Calendarでひさびさに記事を書きました。 流行り始めたtRPCAPI通信を型にはめて開発しよう tRPCとは何か tRPCとは何でないか コード例 Zod(等)によるバリデーション TypeScriptの型をZodスキーマに変換する 他のJSフレームワークとの連携 GraphQLを使わなくても良い、のか まとめ メリークリスマス、良いお年を!

    ■ - uehaj's blog
    uehaj
    uehaj 2022/12/25
    ブログにリファレンス転記しました。tRPCはいいぞ。
  • Reactベース静的サイトジェネレータGatsbyの真の力をお見せします - uehaj's blog

    Reactベース静的サイトジェネレータGatsbyの真の力をお見せしますという記事をQiitaに書きました。 「「爆速サイト」が必要ない場合でも得られるGatsbyの利点」などを書いています。 GraphQLは良いものだ。 導入 記事を書いた理由 「静的サイトジェネレータ」って何? 一般的な利点 Gatsbyとは わたしの疑問 Gatsbyの特徴と動作 Create React App(CRA)の動作 一般的なSSR(Next.jsなど)の動作 Gatsbyの動作 Gatsby動作をもう少し詳しく ビルド時GraphQL こんなこともできる 「ビルド時GraphQL」の結果をブラウザ内のReactコンポーネントにも渡す Gatsby Plugins コード例 Gatsbyビルドのようす まとめ 「爆速サイト」が必要ない場合でも得られるGatsbyの利点 JAMSatckアーキテクチャ1実装

    Reactベース静的サイトジェネレータGatsbyの真の力をお見せします - uehaj's blog
    uehaj
    uehaj 2018/12/27
    セルクマ
  • 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
    uehaj
    uehaj 2017/12/24
    Advent Calendar記事書きました。ポエム「Reactがなぜ重要か」「GrailsとはGORMである」を追記しました
  • 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
    uehaj
    uehaj 2016/12/23
    記事書きました!(今回3本目ラスト) #jggug #grails
  • ParrotブランチでGroovy3を垣間見る - uehaj's blog

    これはG*Advent callender 2016の記事です。 前日はわたし@uehajの記事でした。明日は@mshimomuさんの記事です。 はじめに Parrotブランチのコンパイル 警告 do-whileループ Java8構文 ラムダ式の記法 細かい話1 細かい話2 メソッド参照の記法 コンストラクタ参照 default method Java7対応 try-with-resources 新しい演算子たち 等値演算子(===, !==) エルビス代入演算子(i.e. ?=) !in, !instanceof 参考資料 まとめ はじめに Groovyの構文解析処理には初期からANTLRというパーサジェネレータのバージョン2(antlr2)が長らく使われてきたのですが、最近Daniel SunさんによってANTLRのバージョン4(antl4)への書き直しがなされました。この新パーサーは

    ParrotブランチでGroovy3を垣間見る - uehaj's blog
    uehaj
    uehaj 2016/12/16
    記事書きましたせるくま(´・(ェ)・`) #jggug #groovy
  • List.collectManyで非決定計算 - uehaj's blog

    これはG*Advent callender 2016の記事です。 前日は@Ziphilさんの記事でした。明日はまた私@uehajの記事です。 出オチでタイトルオンリーです。 すごいHaksell楽しく学ぼう(以降H)にも書かれているように、リストはモナドとみなすと「非決定計算」をあらわすものとみることができます。 つまりたとえばリスト[1,2,3]を「1か2か3のどれか」、リスト[2,3]を「2か3のどれか」をそれぞれあらわすもの、と見るってことです。その上で、[1,2,3] * [2,3] という操作を何等かの方法で表現すれば、「1か2か3のどれか」に「2か3のいずれか」を掛けたものという意味になり、結果として「1*2,2*2,3*2,1*3, 2*3,3*3]すなわち「1か4か6か3か6か9のどれか」を得ることができます。 さて、Groovyのリスト(厳密にはIterable)には、

    List.collectManyで非決定計算 - uehaj's blog
    uehaj
    uehaj 2016/12/15
    Gastah Advent Calender 2016 の記事書きました #groovy #jggug #gadvent
  • JWTトークン認証つきのWeb APIを作るのはGrails+Spring Security REST Pluginを使えば非常に簡単である件 - uehaj's blog

    先日のJGGUG WSでのLT資料を公開します。「JWT」は、ついジェーダブリュティーと読んでしまいましたが、正しい発音は「jot(ジョット)」だそうです。 Use JWT access-token on Grails REST API from ちなみに、上記デモで使用する認証スキームBearerというのがあるんですが、この由来は「持参人払い小切手(Bearer Check)」から来てるそうです*1。「持参人払い小切手」とは、自筆の署名(サイン)がしてある小切手を銀行窓口に持ってきたならば、その持ってきた人が誰であるかにかかわらず、現金を支払う、というものだとのことです。たしかにBearer認証スキームと同様ですね。 Web API: The Good Partsposted with amazlet at 16.05.19水野 貴明 オライリージャパン 売り上げランキング: 38,55

    JWTトークン認証つきのWeb APIを作るのはGrails+Spring Security REST Pluginを使えば非常に簡単である件 - uehaj's blog
    uehaj
    uehaj 2016/05/16
    認証スキームBearerというのがあるんですが、この由来は「持参人払い小切手(Bearer Check)」から来てる
  • 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
    uehaj
    uehaj 2016/04/06
    セルクマ
  • React Meets Grails 〜ReactはエンタープライズSPAの夢を見るか?〜 - uehaj's blog

    記事は、G*Advent Calendar 2015の24日目の記事です。 昨日は it__sseiさんの記事で、明日はtouchez_du_boisさんの記事です。 (2016/1/22追記) id:bati11_ さんが、記事で作成しているボイラープレートコードのReact部分について、ステップバイステップの詳細かつ丁寧な以下の解説記事を執筆されております。是非併せてご参照ください。 bati11blog.hatenablog.com bati11blog.hatenablog.com bati11blog.hatenablog.com 目次 目次 はじめに 背景 作成するサンプルアプリケーション 方針 フォルダ構成 JS関係の用語について 準備 Grails側 Grailsアプリ context rootの変更 JSコンパイルの呼び出し web.xmlの設定 文字化け対策 Rea

    React Meets Grails 〜ReactはエンタープライズSPAの夢を見るか?〜 - uehaj's blog
    uehaj
    uehaj 2015/12/25
    せるくま
  • (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
    uehaj
    uehaj 2015/11/07
    セルくま
  • Reactはリアクティブプログラミングなのか? - uehaj's blog

    Reactとは 設計をとりもどす Reactでやってみる Elm-HtmlReactの対応 ReactはFRPか? ReactはFPか? FPとOOPの真の関係 まとめ 追記 Reactとは Reactは、Facebookが開発した、JSのUIフームワークもしくはライブラリです。Reactが提供する中核機能は以下です。 イミュータブルなUIビルダー Virtual DOMによる効率的更新 上記に付随するイベントハンドラ群を編成していくための方法論 React単体ではコールバックの組合せで、Fluxの一部として使用するとオブザーバーパターンで実現 効用は、再利用性と保守性・可読性向上です。特に、Reactで作成した画面部品のコンポーザビリティが高く、細粒度のUI部品利用の発展充実が期待されます。作りは通常のJSクラスライブラリであり、覚えたりすることは多くありません。 設計をとりもどす R

    Reactはリアクティブプログラミングなのか? - uehaj's blog
    uehaj
    uehaj 2015/10/28
    セルクマ
  • 関数型とかの論争について - uehaj's blog

    身と蓋がナッシング まず身も蓋もないことをいうと、結局はCPUの命令セットとして動く言語ですからして、大差はないんですよね。 でもこういうことを言うのは、「どうせ宇宙なんて原子の集合だろ!」という小学生なみです。 なので言わない。でもその認識を捨ててもならない。魔法はないです。地続きではあるのです。 「命令型」か「関数型*1」か さてその上で、問うべき問いが、「命令型」か「関数型」であるならば、関数型に明確な優位性があらわれます。イミュータブルデータ。いい響きですね。map,filter,...いいですね。for禁止、シビれます。いいか、おまえら! forは禁止だ! 了解しました軍曹殿! この利点はあきらかで、かつ入手することが比較的容易です。scalaでもJava8でもreactでも、それなりに努力すればそれなりのものが手に入りそうです。 このレベルではOOPとの対立項はないんじゃないか

    関数型とかの論争について - uehaj's blog
    uehaj
    uehaj 2015/04/14
    追記コメント: じゃあ「すべてはクラス」「すべてがオブジェクト」というのがすでに信仰かどうか?ですが、まあ近いとだけ。そんなら「すべてが関数」は信仰か? うーん。うーん。ラムダこりゃ…。
  • Elmでやってみるシリーズ16: マウスストーカーを実装する - uehaj's blog

    「リアクティブプログラミングの技術を用いてマウスストーカーを実装する - はこべブログ ♨」という記事があり、興味深いのでElmのリアクティブプログラミングで似たようなことをやってみました。 全画面表示はこちらから。 コードは以下で、プロジェクト全体はこちらにあります。 import Text import Window import Time import Mouse import List import Signal import Graphics.Element(..) import Graphics.Collage(..) import Color(..) import Signal(Signal,(<~),(~)) import AnimationFrame -- マウスの座標をCollageの座標に変換するいつもの関数 mousePos : Int -> Int -> Int

    Elmでやってみるシリーズ16: マウスストーカーを実装する - uehaj's blog
    uehaj
    uehaj 2015/03/11
    記事書いた
  • 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
    uehaj
    uehaj 2015/02/27
    ブログ書いた
  • Elmでやってみるシリーズ15: Json.Decodeで9個以上のフィールドを持つobjectをデコードしてみる - uehaj's blog

    記事では、ElmのコアライブラリにおけるJSONデコードパッケージJson.Decodeを用いて、9個以上のフィールドをもつオブジェクトのデコード方法について説明する。 2015 08 31追記あり(andMapを使用する) その前に その前にJson.Decodeを簡単に説明する。 Json.Decodeは、JSONのデコード処理をするためのコアライブラリの一つである。Elm 0.14以前のものとは完全に置き換られている*1。 Jsonデコード処理の概要 一般形式としては、 decodeString : Decoder a -> String -> Result String a decodeString <デコーダ> <JSON文字列> = ... である。decodeStringは、第二引数<JSON文字列>をJSON文字列としてパースし、<デコーダ>で指定した型のデコード結果を返

    Elmでやってみるシリーズ15: Json.Decodeで9個以上のフィールドを持つobjectをデコードしてみる - uehaj's blog
    uehaj
    uehaj 2015/02/23
    ヘルパーはDecoderを返すべきだな。セルフ突っ込み
  • Elmにおけるimportの使い方 - uehaj's blog

    Elmにおけるインポートの方法を説明する。説明が対応するElmのバージョンはElm 0.14かそれ以降、ただしインポートの仕様は今後大きく変更される可能性がある(今後についての関連情報)。 他モジュールで定義され、エクスポートされた識別子(型コンストラクタ、値コンストラクタ、型エイリアス、定数・関数など)は、インポートすることで始めて使用可能となる。Elmのimportは、この点でJavaのimportと異なっている。Javaではimport宣言をしてもしなくてもFQCNを指定すればクラスパスにあるすべての識別子を参照可能であるが、Elmでは、インポートの明示的な宣言をしない限り、他モジュールの識別子を利用できない(ただし、いくつかのモジュール・識別子はデフォルトでインポートされている。後述)。 インポートの宣言をする方法は大きく分けて2つある。 Qualified Import Ope

    Elmにおけるimportの使い方 - uehaj's blog
    uehaj
    uehaj 2015/01/14
    Elm 0.14ではデフォルトインポートが減ってimportを書くのが面倒になったなー。IDEで自動編成してくれないものか
  • 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
    uehaj
    uehaj 2015/01/07
    ブログ記事かいた
  • Groovyじゃんけん作ってみた - uehaj's blog

    JGGUGのイベントではおなじみの「Groovyじゃんけん」を実際に作ってみました。 import static Hands.* enum Hands{ GOO,CHOKI,PAR; public result = [:].withDefault{"$this is even with $this"} } def rule(Hands x) { [defeats:{Hands y-> x.result[y]="$x beats $y" y.result[x]="$y is beaten by $x"}] } def janken(Hands x) { [with:{Hands y-> println x.result[y]}] } rule GOO defeats CHOKI rule PAR defeats GOO rule CHOKI defeats PAR janken GOO wi

    Groovyじゃんけん作ってみた - uehaj's blog
    uehaj
    uehaj 2014/12/27
    昔書いた、Groovyじゃんけんのリンクを貼っておくか
  • 実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog

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

    実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして - uehaj's blog
    uehaj
    uehaj 2014/12/24
    追記 "仮想関数による多態性イラネ。原語では同じ単語で多相性とかぶってる""操作のレシーバーという概念は非対称で嫌。レシーバーと他の引数、戻り値の型に非対称性があり、数学的概念の記述などでの一般性を阻害す
  • Elmでやってみるシリーズ14:ライブラリを公開する - uehaj's blog

    この記事は「Elm Advent Calendar 2014」の23日目として書きました。 今回は、作成したElmのライブラリをElmコミュニティライブラリに公開してみます。公開するブツは以前こっそりと作成してすでに登録していた「IntRange」というもので、たいしたものじゃございません*1。今回Elm 0.14に対応させた上で、elm-packageコマンドの登録手順を整理してみます。 プロジェクトを作る 何はともあれ、公開したいプロジェクトを作ります。 ディレクトリを作ってそこにcdしてelm-packageを実行。 $ mkdir IntRange $ cd IntRange $ elm-package install Some new packages are needed. Here is the upgrade plan. Install: elm-lang/core 1.0

    Elmでやってみるシリーズ14:ライブラリを公開する - uehaj's blog
    uehaj
    uehaj 2014/12/23
    IKEAの生ツリー