MarkdownでSlide作成して自分のGitHub Pagesで公開する
MarkdownでSlide作成して自分のGitHub Pagesで公開する奴を作りました。 資料がアチラコチラに散らばることがなく、テキストでGitなので差分が見れたりと結構便利です。 動きがあるスライドなどは辛いですが、さくっと作る時には良いかと思いますので良かったら使ってみてください。
忙しい人用まとめ
- SlideをMarkdownで書いて自分のGitHubで管理して、自分のGitHub Pagesで表示できるようにした。
- reveal.js version 3.5.0を使用
- 毎回HTMLとか書きたくないので、Markdownのパスを指定すればスライドが表示されるようにした。
- 真似したい人は、リポジトリをForkやCloneして、GitHub Pagesで公開すればすぐ使えます。(↓に使い方書いてます)
- スライドサンプル
経緯とか
私はスライド資料をPowerPointやKeynoteで作るのが嫌なのでMarkdownで作成しGitHubで管理しています。*1今までは、そのスライドをSlideck(https://slideck.io/
)というサービス*2でスライド表示していたのですが、たまに繋がらない事があったり、HTTPSで警告が出るようになったりとしていて、最近サイト自体が消えてドメインが別の方のものになってました。😂
代替サービスも色々探してはいたのですが中々しっくりくるものに巡り会えず。(一応下の方にまとめておきます。)自分でなんとかしようとなった次第です。
Markdownをスライド表示するreveal.jsは以前少しだけ触ったことがあったので、外部ファイルからファイルを読み込める事ができることは知っていました。なので、GitHubにあるMarkdownファイルを直接読ませたら表示できるのでは?っと読ませたら普通にスライドが表示されました。*3
という事で、最終的にはGitHub Pagesとして作成してみました。
使い方
初回
- git clone or forkして自分のGitHubにリポジトリ作成
- プロジェクトのsettings
- GitHub Pagesとして公開
- 以下にアクセス
スライド追加
PDF出力をする場合
- 公式にも記載がありますが、一応記載しておきます。
- URL末尾に「&print-pdf」を付与して表示。
- ブラウザの印刷設定
- PDFに保存、横向き、背景のグラフィックにチェック
- 保存
注意点
- GitHub Pagesなので更新が遅い場合があります
- ブラウザにキャッシュされている場合もある(キャッシュクリアや別ブラウザ、シークレットモードなどで確認)
- 古いブラウザは考慮していません
- オフラインでは見れません(↓のPDF化参照)
調査した代替サービス(覚えているものだけ)
- GitPitch
- Qiita
- ○ Qiitaの記事をスライドで表示可能
- × GitHub管理ではない(資料が分散してしまう、芝が生えない)
- ○ たくさんの人に見てもらえる
- Marp
- WikiNote
- △ 匿名
- × 誰でも変更可能
- × GitHub管理ではない(資料が分散してしまう、芝が生えない)
- × スライドモードでスライドが2枚づつ作成されている?
- Generate Google Slides from markdown
- 最近発見したのであまり調べてないが、最終的にこれでGoogleSlideに変換してSlideShareなどで公開するのもありかな?
- 参考 : MarkdownファイルをGoogleスライドに変換
*1:どこでもアクセス可能、履歴、差分見れる、芝生えるとメリットいっぱい
*2:ボケてなどを作ってる、ゆーすけべーさんが作成。 http://blog.yusuke.be/entry/2016/03/18/150640
*3:raw表示を行うURLを渡しましょう。 https://raw.githubusercontent.com/…
We Are JavaScripters! @10thに参加してきた #WeJS #yahoolodge
資料など、随時更新します。
はじめに
- 8月25日(金)に「We Are JavaScripters! @10th」という勉強会に参加してきた時のメモです。
- 全てLT、酒飲みながらのメモなので*1、興味のある発表については資料見たほうが早いかと思います。
- 資料については公開され次第、随時追記します。
- 記念すべき10回目!
- ちなみに、登壇者で応募しましたが抽選で落ちました😂
- 6人枠の所に14人?とか。辛い。
- 登壇者9人中6人が、発表タイトルにReactが入っている。
- 人数が↑と合わないのは、スポンサー枠、主催者枠のため。
- ハッシュタグ : #yahoolodge #WeJS
概要
「JSの勉強会って、登壇する人がハイレベルな人ばっかりだな〜」 と思ったのがきっかけで作った勉強会、「We Are JavaScripters」! 自分が学んだこと/気づいたこと/面白かったこと/失敗したこと/ハマったこと/挑戦したこと/デバッグテクニック/オススメツール・開発環境/お気に入りのライブラリ/オレオレライブラリ/実はこうだった言語仕様/tips などなど、 お酒を片手に、気軽に発信できる場を目指しています^^/ ※誰でも怖がらずに登壇できる空気を作りたいだけだけなので、もちろん玄人のみなさんも登壇大歓迎です!!
LT.1:Reactのフォーム画面開発で発生する問題をredux-formで解決する @kazuaki_okamoto
- 発表資料
- redux-formはあまり実務で使用されていないらしい。
- 手上げが少ない。
- http://redux-form.com/7.0.3/
- GitHub☆が7300↑
- React+Reduxより簡単完結。
- FieldArray便利っぽい。
- 配列で取得。
- パフォーマンスのメリット
- Field=Reduxのconnectのような扱い
- V6で大幅に改善。
- 入力値のバリデーションとエラー状態管理
LT.2:Reactに不変の愛を @boiyaa
- 発表資料
- 内容的に公開は難しい予感。
- ElmとJavaScriptを組み合わせたアプリケーションの作り方
- 主催者いじりが始まる。
- elmの話w
- http://elm-lang.org/
LT.3:Take into Accessibility in React @usagi-f
- 発表資料
- まだ公開されていない?
- 元デザイナーの方
- Accessibilityを意識したReactの話。
- 実は相性が良いReactとアクセシビリティ
- UIが容易に制御
- 既に多くの拡張がある
- WAI-ARIA
Web Accessibility Initiative - Accessible Rich Internet Applicationsの頭文字であり、HTMLやSVGで利用できるアクセシビリティ確保のための属性の仕様です。
- aタグのhrefは必須じゃない
この属性は、プレースホルダーリンクを生成するために省略できます (HTML5)。プレースホルダーリンクは従来のハイパーリンクに似ていますが、どこにも移動しません。
- ta11y?
LT.4:CSSの嫌なところを解決できる。そうCSS Houdiniならね。 @fukaminmin
- 発表資料
- まだ公開されていない?
- CSSはブラウザ対応がだるい
- Houdini
- 海外のマジシャン?
- https://twitter.com/mki_skt/status/901043986965569537
- Typed OM
- px計算とかが楽。
- ブラウザの実装状況はひどい。
LT.5:Chromeデベロッパーツールを自分色に染める @jumpei_ikegami
LT.6:flowがReactにもたらすもの @takanorip
- 発表資料
- まだ公開されていない?
- 技術書展出店予定
- flow?
- 静的型チェッカー
- 小さく試せる
- レガシー環境下でも使える
- AltJSではないのでESの機能すべて使える
- Reactと相性がいい
- 作ってる所が一緒
- エラーが出た時に参考にできる情報がない
- GitHubのissueを見る
- flowは後から入れても大丈夫なので、小さく入れてみると良い
LT.7:ReactでPDF帳票を出力する @stakezaki
- 発表資料
- ReactでPDF
- フルスタックエンジニアはいらない
- HTMLとJSだけあればいい
- vte.cx Advent Calendar 2016
- https://admin.1.vte.cx/
- 裏ではnode.jsではなくNashornを使っている
LT.8:レガシーな環境にTypeScriptを導入した話 @ama
- 発表資料
- まだ公開されていない?
- レガシーな環境とは。
- 型があるって素晴らしい!
- ある程度は書き方が統一できる
- jQueryを使っていたら、jQueryの型定義が既にある。
- 独自の型定義をどこまで頑張るのか問題。
- Java、C#のエンジニアが多い場合にはTypeScriptがいい!
LT.9:同じとは @chikoski
- 発表資料
- 2と10は同じ
- 偶数だから
- 同じというのは価値観によるので難しい
- JavaSciprtの同じがわかる表
JSの比較ってこわい #wejs pic.twitter.com/fYw11i3u7H
— さっくる / Saki (@sakkuru) 2017年8月25日
*1:特に後半
JJUG ナイトセミナー 「Java O/Rマッパー特集」に参加してきました #jjug
久しぶりに?JJUGナイトセミナーに参加してきましたその際のメモになります。
あくまでもメモなので、抜けている箇所や誤っている箇所がある可能性があります。セッションの資料はかなりわかりやすかったので、是非各スライドをご参照ください
概要
時間 | 内容 |
---|---|
19:00-19:05 | オープニング |
19:05-19:30 | 「25分でわかるJPA」 |
19:30-19:55 | 「MyBatis を利用した Web Application 開発についてのご紹介」 |
19:55-20:05 | 休憩 |
20:05-20:30 | 「ざっくりわかるDoma」 |
20:30-20:55 | 「Reladomo入門」 |
20:55-21:00 | クロージング |
21:00- | 懇親会 |
25分でわかるJPA
- スピーカー
- 多田真敏 (@suke_masa)
- 株式会社カサレアル
- 発表資料
- 25分でわかるJPA → 25分で(難しさが)わかるJPA
- JPAとは
- 実際に実行されるSQLは絶対にログに出せ!
- エンティティの状態
- めっちゃ重要
- 永続化コンテキストに含まれるか否か
- EntityManagerのメソッドで状態を変更する
- エンティティの状態遷移のスライドが最大に重要
- mergeメソッドの引数のオブジェクトは状態変更されない
- 返り値のオブジェクトが状態変更されている
- JPQLとは
- SELECT,UPDATE,DEKETEのみ
- INSERT、集合演算、FROMでの副問合せはできない
- 殆どSQLと一緒だが、ちょっと違う
- リレーションとN+1問題
- フェッチは基本LAZY
- EAGERは不要なデータを読み込むため
- LAZYからEAGERから動的に変更も可能
- JOIN FETCH文
- DISTINCTを使用する
- SQLに加えてListの重複を取り除く
- フェッチは基本LAZY
- Spring Data JPA
- 超おすすめ
- 便利機能満載
- JPAは使えるのか?
- 使える
- ただし、正しい知識、シチュエーションを選ぶ必要がある
- JPAを使っていい条件
- DBを新規に設計できる
- 集合演算やFROM区
- パーフェクトJava EEを読破した人がプロジェクトに1人以上いる
- ↑が1つでも当てはまらないならば他のORマッパーを使ったほうが良い
MyBatis を利用した Web Application 開発についてのご紹介
- スピーカー
- Tokuhiro Matsuno (@tokuhirom)
- LINE Corp.
- 発表資料
- MyBatisとは
- 永続化フレームワーク
- SQLは直接書く
- interfaceを通じて呼び出す
- 結果をBeanにMappingする
- シンプルなので学習コストが低い
- どんなスキーマでも使える
- 手でSQLを書くため
- 主キーがなくても
- サブクエリなど複雑なクエリも簡単に使える
- 完全にDB製品に依存する
- 発行されるクエリが人間に読みやすい
- 手で書くため
- 3つの書き方
- 困ったときに検索するとStack Overflowに引っかかるので大丈夫
- Intellij IDEAがあれば、色々補完が効くので結構大丈夫
- Spring bootのサポートが手厚い
- Spring Initializrってのがかなりいいらしい
- 利点
- 欠点
ざっくりわかるDoma
- スピーカー
- うらがみ (https://github.com/backpaper0)
- 関西Javaエンジニアの会
- 発表資料
- Domaとは
- DaoとエンティティでDB操作
- SQLはMETA-INF配下に置く
- ない場合にはコンパイル時にエラーにしてくれる
- SQLにロジックもかけたりする(後が辛い
- Daoでできること
- Streamで複数件検索する場合はStreamを直接返すメソッドは警告がFunctionを返すメソッドを使用する
- forUpdate対応
- 挿入、更新、削除でSQLファイルを書くことも可能
- Domaができないこと
- Selectクエリの自動生成
- 親子などの構造を持ったエンティティへのマッピング
- ドメインクラス
- ドメインクラスのデメリット
- クラスが多くなる
- 作るの面倒
- コンパイル時検査
- Domaだけで使える
- 依存jarがない
- Spring Bootにプラグインありで使いやすいとのこと
- Domaは日本語ドキュメントあり
- DomaはSeasarからの派生
Reladomo入門
- スピーカー
- 伊藤博志 (@itohiro73)
- 株式会社FOLIO
- 発表資料
- 「りらども」と読むらしい
- Relational Domain Object
- ゴールドマン・サックスが2016/9に公開
- OSSとしては日が浅いが、2004年に開発開始している
- XMLからコード/DDLの自動生成
- 強力に型付けられたクエリ言語
- SQLは書かない
- 具象クラス
- Finderクラスを用いてOperationを生成
- 複雑なクエリを型安全で柔軟に書ける
- キャッシュ
- 複数のキャッシュを持つ
- キャッシュはかなり賢い
- あまり深く考えなくても自動でDBアクセスを最小に保てる
- セッターに値渡すといきなり更新が走る
- まとめたい場合にはトランザクションを作成する
- Listで一括で複数更新も可能
- 関連はXMLで定義
- N+1問題
- deepFetchというAPIを利用する
- 取得したい関連をdeepFetch指定
- みんなでアホになってフレームワークに任せましょう
- GS Collectionsのサポートが手厚い
- Eclipse Collectionsは現在サポートされていない
- まもなくサポートされる予定
- JUnitサポート
- h2でいい感じに使える
- バイテンポラルモデルサポート
We Are JavaScripters! @9thに参加してきた #WeJS #21cafe
はじめに
- 7月20日(木)に「We Are JavaScripters! @9th」という勉強会に参加してきた時のメモです。
- 全てLT、酒飲みながらのメモなので*1、興味のある発表については資料見たほうが早いかと思います。
- 資料については、2017/07/21 9:00現在公開されていないようなので、公開され次第追記します。
- ここ何回かは参加できていませんでしたが、もう9回目かという感じ。早いなー
概要
「JSの勉強会って、登壇する人がハイレベルな人ばっかりだな〜」 と思ったのがきっかけで作った勉強会、「We Are JavaScripters」! 自分が学んだこと/気づいたこと/面白かったこと/失敗したこと/ハマったこと/挑戦したこと/デバッグテクニック/オススメツール・開発環境/お気に入りのライブラリ/オレオレライブラリ/実はこうだった言語仕様/tips などなど、 お酒を片手に、気軽に発信できる場を目指しています^^/ ※誰でも怖がらずに登壇できる空気を作りたいだけだけなので、もちろん玄人のみなさんも登壇大歓迎です!!
LT.1:JavaScriptパターンシリーズ ~オブザーバパターン~ @ta__miyan
- 発表資料
- 最近フリーランスになったらしい。
- なぜオブザーバーパターンか?
- オブジェクトが気にかけていることが起きた時に通知。
- Flux/Reduxはオブザーバーパターンベースの設計。
LT.2:新卒エンジニアが Angular と React の比較をしてみた @atsushi
- 発表資料
- 新卒の方らしい。
- Angular4
- 独自ルールはだるい。
- 先行事例が少なくてつらい。
- 開発ツール使うと感動の嵐。
- React
- 先行事例が多い(日本語情報多い)
- jsxが気持ち悪い
- ライブラリの依存関係が多くてだるい
- 開発ツール使うと感動の嵐。
- RxJSは鬼ムズイ
- Reduxはめんどくさい
- ルールがかっちりしてるので、ちょっとしたことに対する手続きが多い。
LT.3:非SPAで小さく始めるReactアーキテクチャ @masarufuruya
- 発表資料
- SPA導入の記事が多い。
- 非SPAの記事が少ないので発表してみる。
- jQueryとReactの同居。
- 発表後にjQueryとReactの同居は辛くない?という質問 → まだプロジェクトは完了してないが、今のところは問題ないとのこと。
- axiosを使うとモックが使えて便利らしい。
- 初回のロード待ちの解消にはgon
LT.4:Reduxでmiddlewareを酷使するためにスロットマシーン書いた @腹筋コントローラーの力を信じろ
- 発表資料
- そこそこのアプリにならないとわからない。 → 作ってみた
- Actionの分解。
- Middlewareは何に反応して何に処理を繋ぐかだけを考えれば良い。
- 結構いいんじゃない?という感想。
- まかないてっく#1杯目 〜フロントエンドを語ろう〜の参加者募集中!
- 前提の知識が私に足りなかったため、あまりメモれず。。。
LT.5:JavascriptでチャットCLIツール作成!@akane_256
- 発表資料
- チャットボット流行ってるので何か作ってみたい。
- GoogleのAPI.AIが便利そう。
- Node.jsのSDKがある。
- 言い回しのゆらぎを吸収。
- コンソールに「ピザ食べたい」。
- API.AIはサンプルコードがあるので、JavaScriptがわかれば簡単。
- 楽しむの大事。
- API.AIは今のところは無料らしい。
- そのうち有料化の話もある??
- API.AIのサンプルはピザ注文らしい。(チュートリアル?)
LT.6:JavaScript で味わう、関数型プログラミングのメリット @k5jp1015
LT.7:Generate a QR code with your image by Vue.js! @schwalbe
- 発表資料
- LTするどころか、見ることもはじめて。
- 本業はコンサルらしい。
- とても初心者とは思えないw
- 今後もプログラミングは続けていくとのこと。
LT.8:いまさらのPromise再入門 @chikoski
- 発表資料
- いずれされる処理を表すオブジェクト
- 状態を2種類持っている。
- if文(成功 or 失敗)
- 仕事する前を含めて3つ
- 直列化、並列化
- エラー処理と本筋と分けて書ける
- 普通の処理もPromiseで書いちゃう
- thenの中でthenといったネストしたPromiseはよく考えた方が良い。
- Promiseの本
*1:特に後半
Redshiftの文字列はバイト数換算
Amazon RedshiftはPostgreSQL互換ですが、多くの違いがあります。異なる点については公式を始めとして各所にまとまっていますが、タイトルの件についてはあまり記載を見なかったのでメモしときます。
PostgreSQLは文字数
SQLは2つの主要な文字データ型を定義しています。 character varying(n)とcharacter(n)です。 ここでnは正の整数です。 これらのデータ型は2つともn文字長(バイト数ではなく)までの文字列を保存できます。
わざわざ、バイト数ではなく
と強調して書かれています。
create table hoge(c1 varchar(5)); insert into hoge(c1) values('12345'); -- OK insert into hoge(c1) values('あいうえお'); -- OK select * from hoge; insert into hoge(c1) values('あいうえおa'); -- NG
実際にSQLを実行しても文字数換算です。
Redshiftはバイト数
CHAR および VARCHAR のデータ型は、文字単位でなくバイト単位で定義されます。CHAR 列にはシングルバイト文字のみを含めることができます。したがって、CHAR(10) 列には、最大 10 バイト長の文字列を含めることができます。VARCHAR にはマルチバイト文字 (1 文字あたり最大で 4 バイトまで) を含めることができます。例えば、VARCHAR(12) 列には、シングルバイト文字なら 12 個、2 バイト文字なら 6 個、3 バイト文字なら 4 個、4 バイト文字なら 3 個含めることができます。
こちらも、わざわざ文字単位ではなく
と強調して書かれています。
create table hoge(c1 varchar(5)); insert into hoge(c1) values('あいうえお'); -- NG insert into hoge(c1) values('12345'); -- OK select * from hoge;
実際にSQLを実行してもバイト数換算です。ちなみに、日本語は3-4バイトになるので注意が必要です。
insert into hoge(c1) values('あ12'); -- OK insert into hoge(c1) values('あ123'); -- NG insert into hoge(c1) values('𠮷1'); -- OK insert into hoge(c1) values('𠮷12'); -- NG
参考
Spring Bootを使ってWebアプリケーションを作成する(開発環境から)
はじめに
- 某所でお題として与えられ、楽勝!って思ったら完遂できなかったので、ハマった所を解消し、再挑戦した際のメモです。*1
- 最良、最適な方法ではないと思いますので、参考にする場合には自己責任でお願いします。*2
- コードは一部しか記載しませんので、全てを確認したい場合には参考用コミットとしてGitHubへのリンクを記載してますので、こちらを確認してください。
要件とか
- 下記の要件でWebアプリケーションを作成する。
- 少しでも早く作成する。
- 指定されていない事は想定する必要はない。
- 最低限要件を満たした上で1秒でも早く作成する。
環境
アプリケーションの要件
- 問い合わせフォームを作る
- 「 http://xxx.xxx.xxx.xxx 」でアクセスすると問い合わせフォーム画面が表示される。
- ポートは80
- 問い合わせフォーム画面は、「名前」、「Eメール」、「問い合わせ内容」の3つの入力が可能。
- それぞれの入力にそれなりにValidationをかける。
- 送信ボタンを押下すると完了画面が表示される。
- 送信ボタン押下時にDBに入力内容を保存する。
- DBはなんでも良い
- テーブル構成もなんでも良い
リポジトリ
- この記事のコードは以下に置いてあります。
- https://github.com/yamap55/example_minimum_form_for_springboot
- 手順に沿ってコミットも分けていますので、見たい方はどうぞ。
Pleiadesインストール*4
プロジェクト作成
- プロジェクトエクスプローラ上で右クリック → 新規 → プロジェクト
- Spring → Springスタータープロジェクト
- Spring Boot Version : 1.5.3
- Dependencies
- DevTools
- Web
- Thymeleaf
- H2
- JPA
完了
問い合わせ画面を作成
- Controllerを追加
- com.example.demo.DemoApplication.java
- クラス分ける時間が惜しいので、アプリケーションを起動するクラスに追加してしまいます。
- com.example.demo.DemoApplication.java
@RequestMapping("/") public String index(Model model) { return "index"; }
- 画面を作成
- src/main/resources/templates/index.html
- 特に特筆すべき事はないのでコードは割愛。
- アプリケーション起動
- プロジェクト右クリック → 実行 → Spring Boot アプリケーション
ブラウザで確認
完了画面を作成
@RequestMapping("result") public String result(Model model) { // TODO 入力チェック // TODO DBに保存 return "result"; }
- 完了画面に遷移するように問い合わせ画面を変更
- src/main/resources/templates/index.html
- <form role="form" action="#"> + <form role="form" th:action="@{/result}" method="post">
- 画面を作成
- src/main/resources/templates/result.html
- 特に特筆すべき事はないのでコードは割愛。
ブラウザで確認
入力チェックを追加
public class InputForm { @NotEmpty @Size(min = 1, max = 50) private String name; @Size(max = 50) private String email; @NotEmpty @Size(max = 100) private String message; // getter, setterは略 }
- 入力チェックでエラーとなった場合には問い合わせ画面に戻す処理を追加。
- com.example.demo.DemoApplication.java
- public String result(Model model) { - // TODO 入力チェック + public String result(@ModelAttribute("inputForm") @Valid InputForm form, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + return index(form, model); + }
- エラーメッセージを表示するように修正。
- src/main/resources/templates/index.html
- <p>名前 : <input type="text" name="name" /></p> + <p>名前 : <input type="text" th:value="*{name}" name="name" /></p> + <p><span + th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></span> + </p> <!-- 以下略 -->
ブラウザで確認
DBに保存する
- DB(H2)に入力情報を保存する。
- ブラウザで確認
- ドメインを作成
@Entity @Table(name="message") public class Message { public Message(InputForm form) { // 何か他にいい方法ありそうだけど、コンストラクタでformから入れ替える this.message = form.getMessage(); this.email = form.getEmail(); this.name = form.getName(); } @Id @GeneratedValue private int id; @Column private String name; @Column private String email; @Column private String message; // getter, setterは略 }
public interface MessageRepository extends JpaRepository<Message, Integer> { }
- 保存処理を追加
public class DemoApplication { + @Autowired MessageRepository repository; // 略 - // TODO DBに保存 + repository.save(new Message(form));
ブラウザで確認
プロパティファイルは好きじゃないのでYAMLに変更
src/main/resources/application.properties → src/main/resources/application.yml
DBに保存されている事を確認するためh2コンソールの表示設定を追加
- src/main/resources/application.yml
spring: h2: console: enabled: true datasource: url: jdbc:h2:mem:test
起動するポート番号を変更
- src/main/resources/application.yml
+server: + port: 80
ブラウザで確認
- アプリケーションの再起動が必要かも。
- http://localhost
- http://localhost/h2-console
jarで出力する
- プロジェクト右クリック → 実行 → Maven install
- target配下にjarが出力されていることを確認。
jar単体で起動
- コマンドプロンプト起動。
java -jar demo-0.0.1-SNAPSHOT.jar
- ブラウザで確認
動作環境の整備
- Linuxにログイン
- Javaのインストール
sudo yum install java-1.8.0-openjdk.x86_64
- ↑で作成したjarをLinuxに移動
- ファイアーウォールを止める
sudo service iptables stop
- 起動
java -jar demo-0.0.1-SNAPSHOT.jar
- ブラウザで確認
- http://xxx.xxx.xxx.xxx
- http://xxx.xxx.xxx.xxx/h2-console
- h2コンソールを見たい場合には起動オプションに「
--spring.h2.console.settings.web-allow-others=true
」を追加することで確認可能。
- h2コンソールを見たい場合には起動オプションに「
まとめ
- ハマった部分が解消されたら、特になんてこともなくこなすことができ、凹んでいた気分が少し回復したので良しとする。
- ハマった部分に関しても、落ち着いて挑めば解決できたと思うので、焦ってエラーメッセージや事象を検索するのではなく、外の空気でも吸いに行けばよかったと思った。
- 色々突っ込みどころはあると自分でも思うが、お題がお題なのでこんなものではないだろうか。
- いいお題だと思ったので、今後新しいフレームワークを学ぶ際にはこのお題をこなそうと決めた。
GroovyでJSONをPOSTする
概要
- ↓をGroovyでやりたい。
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":"abcdef","user":{"name":"tarou","age":20,"email":"example@example.com","result":true}}' https://script.google.com/macros/s/xxxxxxxxx/exec
groovy.json.JsonBuilder
を利用してJSONを作成。groovyx.net.http.HTTPBuilder
を利用してPOSTする。
コード
@Grab("org.codehaus.groovy.modules.http-builder:http-builder:0.7.1") import groovyx.net.http.HTTPBuilder import groovy.json.JsonBuilder import static groovyx.net.http.ContentType.* def json = new JsonBuilder() json { id "abcdef" user { name "tarou" age 20 email "example@example.com" result true } } def postBody = json.toString() assert postBody == $/{"id":"abcdef","user":{"name":"tarou","age":20,"email":"example@example.com","result":true}}/$ /* { "id":"abcdef", "user":{ "name":"tarou", "age":20, "email":"example@example.com", "result":true } } */ def http = new HTTPBuilder("https://script.google.com/macros/s/xxxxxxxxx/") http.post( path: 'exec', body: postBody, contentType: JSON ) { resp -> println "POST Success: ${resp.statusLine}" }
- 昨日の記事「JSONをPOSTしてGoogle SpreadSheetに書き込む」で作成したGASにPOSTしてます。