azihsoyn's blog

技術のこととか釣りの事とか(書けたらいいなぁ)

根掛かりについて

この記事は釣り Advent Calendar 2017 - Adventar6日目のエントリーです。 お昼休みに釣りマンガを読んでいたら気分が昂ぶったので書いてみました。

釣り、特にルアー釣りは根掛かりとの闘いでもあります。自分もしょっちゅう根掛かりしてはルアーをなくしてテンション下がって撤収したりしてます。ルアー自体そんなに安くないので本当に凹みますよね。。 対策も色々ありますが、自分の中で根掛かりとどう闘ってきたかを書いてみたいと思います。

対策なし時代

釣りを再開したての時は根掛かりの辛さを忘れていて特に対策をしていませんでした。 釣りに行く回数が増え、根掛かりによるロストも増えてきてから色々対策を考えるようになりました。

ラインを太くする

シーバスメインだったのですが、1.5号のラインで釣りをしていたのを2.0号ぐらいにしてみました。 気持ち回収できる確率は増えた気がしますが気のせいかもしれません。

ルアー回収機を使う

雑誌で読んだのですが、ルアー回収機というものが販売されてます。

この2つを組み合わせて釣りに持っていくようにしてました。 この回収機が届く範囲であれば高い回収率を誇っていました。 ただ、持っていくのが面倒くさいのと、届かない範囲では無力なのでいつの間にか持っていかなくなりました。

ラインを更に太くする + ルアーのフックを細いものにする

マグロ釣りに行った後だったのでラインを3.0号ぐらいにしていたのをそのまま使っていました。 更にフックが細ければロストは防げるんじゃね?という考えでしばらく運用していました。 実際交換したルアーは根掛かりしてもラインパワーにまかせて引っ張ればフックが伸びて回収できることがありました。

ただフックの交換がめんどくさくなり長くは続きませんでした。

現在

ラインはヒラメ釣りで使っていた1.0号ぐらい(0.8かも)で運用しています。やはりラインが細いと飛距離が出るんですよね。 飛距離は正義。 そんな細いラインで根掛かり対策はどうしてるんだということになりますが、

やめました

結局対策してもロストする時はロストするんですよね。。 根掛かりを恐れずに攻めるのが釣果に繋がると信じたいです。

シンフォギアのユニゾン曲

間違えて登録してしまった感ありますが、この記事は シンフォギア Advent Calendar 2017 の6日目のエントリーです。何故かアドベントカレンダーを書く人が増えてきて半分まで予定が埋まっています。怖いです。

さて、自分がシンフォギアの曲で好きなのは1日目のエントリーでも述べた通りクリスちゃんの「教室モノクローム」や「とどけHappy うたずきん」なのですが、他にも魅力的な曲は沢山あります。

中でも2期から導入されたユニゾン曲は作詞・作曲者のテクニックに感動すら覚えるレベルです。というのも調と切歌それぞれの戦闘曲として成り立っているのが、交互に歌うことで1つの曲Edge Works of Goddess ZABABAとして生まれ変わるんですよね。調と切歌のシンフォギアが同じ聖遺物から造られたという設定も相まって、ファンにはたまらない曲になっています。

残念ながらiTunesなどでは配信されておらず、BDの特典のサウンドボックスでのみ入手できるようです。 ちなみにカラオケでは配信されていますが、元々別の歌を交互に歌うようなものなので大分難易度は高いと思います。

3期5話でも調と切歌の「Just Loving X-Edge」というユニゾン曲が流れますが、同じく5話で防人とクリスちゃんのデュエット曲も流れます。

4期では更に組み合わせが増えます。これは司令が

ギアの特性だけに頼るな!如何なる組み合わせであっても!歌を重ねられるように!心を合わせるんだ!!

という意図の特訓を課した結果です。司令が戦えばいいんじゃね?と思うことが多々ありますが さすが司令官といったところでしょうか。指揮系統が乱れるので絶対に戦場に出ては行けないですね。 これらの曲がライブで聴けるのか今から楽しみです。

明日は kfujita_5000 さんの 「ビジネスシーンで使えるシンフォギアのセリフについて」の予定です。

シンフォギアXDの魅力

この記事はシンフォギア アドベントカレンダー 2017 の4日目のエントリーです。

シンフォギアにはスマートフォン向けのゲーム、戦姫絶唱シンフォギアXD UNLIMITEDがリリースされています。android版は ベスト・オブ2017 のゲーム部門にノミネートされました。(残念ながらベスト5には入らなかったようです。)

自分は元々スマホでゲームをほとんどやらない人間だったのでした。やるゲームといえばポケモンGoをたまに起動するぐらいで、ガチャにはまるなんてもってのほかとさえ考えていました。

そんな自分ですが、シンフォギアを勧めた友人が始めたということもあって手を出してみました。 これが間違いでした。 今ではガッツリはまってしまっています。せっかくなのでシンフォギアXDの魅力を挙げてみたいと思います。

アニメのストーリーを復習できる

現在アニメの3期までのストーリーを追体験できます。自分は4期をやっている途中で始めたので復習するのにちょうど良かったです。(ただ復習するだけならアマゾンのプライムビデオで見たほうが早い気がしますが)。

3期と4期をつなぐストーリー(3.5期)がある

ツイッターの広告でよく見るクリエイティブです。アニメのCMでもやっていたので元々ここは魅力的でした。

アニメで出ない設定(必殺技の名前とか)も出てくる

シンフォギアのアニメの魅力と言えば必殺技のシーンのカットインです。ゲームを始めてからアニメを見返していて思ったのですが、主人公 立花響にはカットイン演出がないんですよね。ゲームでは他のキャラと同様必殺技名つきでカットインが入ります。あれはそういう名前だったのかとファンとしては嬉しいです。

ゲームオリジナルストーリーが楽しい

オリジナルストーリーというと悪いイメージを持つ人もいるかもしれませんが、シンフォギアのゲームでは上手くやっていてアニメの設定が破綻しないようにオリジナルストーリーを展開しています。というのもギャラルホルンという完全聖遺物がオリジナルストーリーに関わってくるんですが、その特性が平行世界との扉を開くというもので、つまり なんでもできる んですよね。「アニメではこうだったけどもしこうなっていたら」みたいなストーリーでもなんでも成り立ちます。実際「片翼の装者」というイベントでは1期一話で絶唱を歌って死んだのが天羽奏ではなく風鳴翼だった世界とつながります。結末は是非ゲームをプレイしてみてほしいのですが(あ、もうイベント終わってた)、感動的なストーリーでした。

また、サブストーリーみたいなものもあり、キャラクターの意外な一面が見れたり意外なキャラにスポットが当たったりするので楽しいです。

アニメでは見れなかったギアが出て来る

オリジナルストーリーがあるからというのもありますが、元々設定はあったものがゲームでカード化されていたりします。

公式サイトではギアは奏者の心を映した姿になるみたいなので見た目が変わるのもオッケーなんでしょう。自分も全然受け入れられます。オリジナルキャラを出すのではなくオリジナルギアでカードの種類を増やすのはなるほどなという感じがします。

ゲームオリジナル曲が聴ける

これはまさかでした。和装イベントでクリスちゃんが新曲「SAKURA BLIZZARD」を歌っててびっくりしました。itunesでの配信はまだですかね?

まとめ

思いついた魅力を書いてみました。色々書いたのですが、一番の魅力は3日目のエントリーで

私は、ガチャするときは友人たちと飲みながらするのが多いのですが、それがすごく楽しいのデス と書いてあったように周りにやっている人がいるということなのかもしれません。

もちろん完璧ではなくて改善して欲しい点もあったりはするのですが、せっかくのアドベントカレンダーなのでいいところだけで終わりにしたいともいます。

明日はスマイルさんが書いてくれるみたいです。何を書くのか本当に楽しみです。

2017年の釣りを振り返ってみる

おはようございます。この記事は 釣り アドベントカレンダー2017 2日目の記事です。 また書くことができて嬉しいです。自分がまだ釣りを続けられているんだなぁと感慨深いです。 まだ納竿するつもりはないのですが、なんだかんだ今年は釣りに行かないんじゃないかという気もするので早いですが振り返ってみたいと思います。

フィッシングショーに参加

フィッシングショー2017に参加してきました - azihsoyn’s blog

新年早々釣りのイベントに参加できたのは良かったです。2018年も参加します。

新タックル

f:id:azihsoyn:20171202105916j:plain f:id:azihsoyn:20171202105949j:plain

買っちゃいました。EXSENCEは思った感じとはちょっと違いましたがデザインは好きです。ソルティガBJはお気に入りです。基本これで釣りに行くようになりました。2018年はステラの新モデルとか出るんですかね。

ヒラメ

f:id:azihsoyn:20171202110036j:plain 狙い続けるも2017年は結果を出せませんでした…。来年こそは!!!

アオリイカ

f:id:azihsoyn:20171202110704j:plain 狙い続けるも2017年は結果を出せませんでした…。来年こそは!!!

シーバス

割りと釣れるようになった気がします f:id:azihsoyn:20171202110410j:plain f:id:azihsoyn:20171202110444j:plain f:id:azihsoyn:20171202110623j:plain f:id:azihsoyn:20171202110931j:plain f:id:azihsoyn:20171202111023j:plain f:id:azihsoyn:20171202111151j:plain

今年は1日で4尾釣る実績も解除できました。 最近小さいルアーで小さい魚を狙うのが楽しくなってきました。アジング専用タックルが欲しくなりました。

外道たち

f:id:azihsoyn:20171202110251j:plain f:id:azihsoyn:20171202110302j:plain f:id:azihsoyn:20171202110847j:plain f:id:azihsoyn:20171202111105j:plain f:id:azihsoyn:20171202111118j:plain

チヌを再び釣れたのは嬉しかったです。2年半前に釣りを再開してから一番最初に釣ったのがチヌでした。その時よりサイズも大きくて成長できた感じがして嬉しかったです(狙って釣ったわけではないですが)。

まとめ

今年で釣りのために移動する範囲が広がった気がします(ヒラメやアオリイカ狙いのためですが)。

ただ今年はプライベートで色々あって去年ほど釣りに行けませんでした。仕方ないですね。ゲームも多すぎましたしね。仕方ないですね。マグロ釣りのリベンジも行けませんでした。

色々と目標が達成できなかったので来年頑張るぞ!釣りも企画するので参加してくださいね 👀

雪音クリスちゃんが好きです

シンシンシンフォギア〜!この記事は シンフォギア Advent Calendar 2017 の1日目の記事です。

去年も書いたアドベントカレンダーですが、今年も懲りずにいっぱい登録してしまいました。

今年の夏アニメでシンフォギアの最新シリーズAXZが放送され、久しぶりにシンフォギア熱が上がってしまい友人たちにシンフォギアを勧めてしまったところ何故か空前の大ブームになってしまいました。むしろ勧めた自分よりもハマっていて若干怖いです。シンフォギアXD(シンフォギアスマホゲー)を始めたり聖地巡礼したりと熱意がすごい。。

その熱意に当てられて自分も引っ張られる形で過去最高なぐらいシンフォギアにハマっているのでこのアドベントカレンダーも作っちゃいました。

そんな身内で大流行しているシンフォギアですが、ゲームの話になりがちで好きなキャラの話にあまりならないのでここに認めようと思います。タイトルの通り自分の推しキャラは雪音クリスちゃんです。

chris

出典: 雪音 クリス キャラクター - TVアニメ「戦姫絶唱シンフォギアAXZ)

2期4話がクリスちゃん回すぎる

全てのクリスちゃんの魅力が凝縮された回です。というかこの回のことを書きたいがためのアドベントカレンダーです。

文化祭でクラスメイトに強く頼まれて音楽コンクールに無理やり出場させられてしまうクリスちゃん。1期では歌が大っ嫌いと言っていましたが本当は大好きなクリスちゃん。歌うのはクリスちゃんの気持ちそのもののような歌詞の「教室モノクローム」。歌詞を書くと色々問題ありそうなので載せませんが、辛い境遇にあったクリスちゃんがやっと見つけた居場所を大切に思うけれどもそれを素直に受け入れられない、でも受け入れたい!みたいないじらしい歌詞になってます。もうほんと 2期4話のために1期1話から見て、、、 って感じです。それしか言えない。。。 このアドベントカレンダーを書くために1期1話から見直していましたが、2期4話の「あたしの帰る場所」のクリスちゃんが歌うシーンは特殊EDといえる終盤のシーンなのですが、スタッフも気合を入れているのかスタッフロールがクリスちゃんが歌うシーンにかぶらないようにする配慮が見られます。

ずっと孤独だったクリスちゃんがやっと見つけた居場所に戸惑いつつも心を開きかけているところが描写されていて最高です。もうホント、「いいんだよ、歌って」って言ってあげたい。。

f:id:azihsoyn:20171130234755p:plain

出典: プライムビデオでキャプチャした2期4話の最高に可愛いクリスちゃんのシーン

それ以外にも可愛いところいっぱいあるんですけどね。

背が低いかわいい

態度とは裏腹に意外と背が低いクリスちゃん。それを気にしているのか履いている靴もヒールが高くなっているような気がします(ギアもヒールが高くなってるの)。スマホゲーのシンフォギアXDでも他のキャラと並ぶと身長差が明確に低くなっているのがわかります。

優しい

公式サイトのキャラクター紹介でも優しいと紹介されているクリスちゃん。

シンフォギアG

誰かと心を交わすことに臆病なクリスであるが、優しい心の持ち主である。

出典: キャラクター - 雪音 クリス(CV:高垣 彩陽) - TVアニメ「戦姫絶唱シンフォギアG」公式サイト

シンフォギアAXZ

やや乱暴な口ぶりとは裏腹に情が深く、心優しい。

出典: 雪音 クリス キャラクター - TVアニメ「戦姫絶唱シンフォギアAXZ」公式サイト

そもそも1期で敵として登場したのも両親の夢を継いで世界を平和にするためなんですよね。世界平和を目指しちゃうの女神すぎでしょ。。。

迷子の親探ししちゃう(1期7話)

自分を騙していたフィーネとの分かれで泣いちゃう。騙されていたとしても一時期は共に過ごしていたフィーネのことを嫌いにはなれなかったのでしょうか(1期13話)

努力家

1期で敵として登場した時はシンフォギアではなく完全聖遺物を身に着けてます。通常のシンフォギアより扱いの難しい完全聖遺物を使いこなしていることから並々ならぬ努力をしてきたことが伺えます。

歌がうまい/声が可愛い

歌については2期4話を見ましょう。それかキャラソンの「とどけHappy うたずきん」を聞きましょう。

ツンデレ

基本というか王道のツンデレです。ツッコミキャラとも言えます。1期ではそれほどわかりませんが仲間になってから目立つようになります。「はぁ〜↑!?」なツッコミが好きです。

後輩思い

GX(3期)で仲間になる調と切ちゃんを後輩と意識している描写が結構出てきます。年功序列を気にする質なのか響、調、切ちゃんに対しては先輩風を吹かせたがり、翼さんに対しては先輩として尊敬の念を見せている気がします。スマホゲーオリジナルストーリーの和装イベントでは、きりしら二人と協力し、仲良くなったためにマリアさんに嫉妬されるシーンもあって最高でした。

変な言葉遣い可愛い

1期4話

  • 私のてっぺんはまだまだこんなもんじゃねーぞ
  • お高く止まるな!
  • のぼせ上がるな人気者!
  • ここでふんわり考え事
  • ちょせぇ!
  • やらせるかよ!好きに、勝手に!

1期6話

  • なんて悠長!この期に及んで!
  • 分かり合えるものかよ人間が!そんな風にできているものか!
  • 持ってけダブルだ!

1期7話

  • 教えてやる、あたしは歌が大っ嫌いだ!
  • 死に体でおねんねと聞いていたが、足手まといをかばいに現れたか?
  • 歌なんて大嫌いだ。特に壊すことしかできないあたしの歌は。
  • そんな風に仲良くするにはどうすればいいか教えてくれよ
    • 迷子の子供に聞いちゃうかわいい

(時間がなくて4期まで復習できませんでした…)

業界用語っぽいというか死語というか不思議な喋り方です。

まとめ

この記事を書くためにプライムビデオで1期から見直したりクリスちゃんについて調べたりしていて、正直クリスちゃんの可愛さはアニメ見れば誰でも分かるのでは、、、?という思いしかありませんでした。みんなシンフォギア見ような。

2018年には初めてライブにも参加しますし、5期も待ってますし、ゲームのオリジナルストーリーもあると思うのでまだまだシンフォギアは盛り上がっていくはず!

ますますのクリスちゃんの活躍が楽しみです。

明日は 5000Hide さんが ガチャ必勝法について書くそうです。

ISUCON7にrubyで参加して手も足も出なかった

どうも。昨年に続き今年もisuconに出てきました。 チームメンバーは完全新規でチームrehash.fm ( おばちゃん (mobata) , ゆづるくん (yudsuzuk) ) で参加しました。別に仲違いとかではないです。

結果としては222位と惨敗でした。 ISUCON7 オンライン予選 全ての順位とスコア(参考値) : ISUCON公式Blog

この悔しさを忘れないために反省点などメモっておきたいと思います。

当日の流れ

開始まで

10時開始予定だったのが13時開始になり大分時間を持て余してました。それでも去年(goで参加)とは違い不慣れなrubyでの参加だったので過去のisuconの問題を振り返ったり、rubyでの解き方などを改めて復習してたりしました。 BGMは仲間内で流行っているシンフォギアのキャラソンをずっと流してました。ゆづる君にとっては完全に意味不明だったと思います。

開始直後(13:13)

サーバーの準備が整いいざ開始してからは、定石に則ってalpを入れたりslow-logをonにしてからベンチを流したりしてました。 予選で初めての複数台構成でしたが、予想してなくはなかったのでそこまでは慌てませんでした(慌てなかったとは言ってない)。 alpを眺めた結果、大量に /icons/:file_name へのアクセスが大量に来ていてまずはこれをどうにかするというのはすぐにわかりました。

この時点(rubyデフォルト)でのスコアは 4119 でした。

チューニング開始(14:13)

そこからアプリケーションコードを眺めて iconsへのリクエストがmysqlから画像データを配信していることが分かり、nginxで配信する方針が立ちました。また、画像ファイルのテーブルにindexが張られていなかったためindexを張ったところ 6453 と微増しました。

nginxで静的ファイル配信(15:55)

mysqlのバイナリファイルをどうやってファイルに書き出そう?とあれこれ調べながら、curlで取ればいいやんと気づくまで結構かかりました。この間ゆづるくんはアプリケーションコードでボトルネックになりそうなところを直してくれてました。おばちゃんはnginxの設定をいじってました。 なんとかnginxでのファイル配信ができるようになったところでスコアは 8846 になってました。(この時点であまりスコアが上がらないことに焦りを感じてました)

静的ファイル配信の試行錯誤(16:01)

nginxでの配信に切り替えてもalpで表示されるログには /icons へのリクエストが支配的でした。そういえばgzipつけてなかったと思ってつけたところスコアが 13393 にまで上がったのでやはり /icons をなんとかしなければという方針のまま進みました。この時点でおばちゃんが帯域を使い切ってることに気づき、Cache-Control だ!!!と過去問(isucon4)のことを思い出せたのでnginxの設定をいじくり回す旅に出ることになりました。完全に

進研ゼミでやったことあるやつだ!

状態でした。勝ったなガハハと思ってました。 この間ゆづるくんはユーザー情報をredisにキャッシュするのをやってくれてました。

ベンチマークツールで複数台指定できることに気づく(16時過ぎ)

去年のisucon本戦に引っ張られてベンチマークに登録できるサーバーは1台だけだと思いこんでました。おばちゃんが「これチェックボックスじゃない?」と気づいてから複数台に対してリクエストが送れることに気づきました。今までweb1, db1サーバーで動かしていたのでこれで帯域倍使えるじゃん!と希望が見えたりもしました。

Cache-Controlが効かない。スコアが上がらない(終了まで)

それからというものweb2台 - db1台構成にしようと色々いじってました。 webが2台になるので画像がアップロードされたらローカルに保存し、nginxはローカルになければ反対側に取りに行く構成にしてました( try_files とかいう便利なディレクティブがあるのを知りました) 。 この設定を動かすのに結構苦労しました。 最終的にちゃんと動く様になったもののスコアは13000台と全く変わりませんでした。帯域も使い切っていることがわかりました。明らかに Cache-Controlが効いてない。。。 そこからはずっとCacheできるように試行錯誤してましたが、結局時間内に解決することはできませんでした。

Keep

  • 去年に引き続き会社の会議室を使わせてもらえたのはとてもありがたかった。社外の人との参加だったけど使わせてもらえたのは本当にありがたいです。大きいディスプレイも使えてalpのスコアを常に見られる状態だった。
  • 事前打ち合わせ(過去問)をやって感覚をつかめた。alpの導入やslackでのやりとり、git(private)でのコード管理を事前に手を動かしながら確認できた。

Problem

  • 過去問を読んだだけで解いた気になってはいけない。isucon4でCache-Controlでハマったというのは知識としては知っていたけど、どんなリクエストが来ていてどんな設定を入れれば適切にCache-Controlを返せたのか理解していなかった。
  • 役割分担がふんわりしていた。これはProblemなのか微妙なところだけど特に誰が何をやるというのは決めていなかった。なんとなくゆづるくんがrubyいじる(アプリケーション担当)、おばちゃんがインフラ、自分は... 🤔 みたいな感じだったのできっちり分担しても良かったのかもしれない。全員がどれもある程度できるといえばできるので自律的に動けていれば問題なかったかもしれない(なんとなく途中で誰かの手が空いてしまう状態が見受けられたのでリーダーポジションは必要なのかもしれない)。
  • レギュレーションをちゃんと読む。当たり前すぎて書くまでもないが、レギュレーションにはちゃんとヒントが載っている(いた)。帯域が制限されていることとかスコアの測定についても記述があるので、もっと早くCache-Controlについて気づけたかもしれない。nginxを解析してボトルネックを解消すればいいという定石に囚われすぎた感がある。
  • ちゃんと動くコード, 設定ファイルが管理できてなかった。rubyのコードはgitで管理していたけどnginxの設定ファイルを複数人で生でいじりすぎた。しかもweb1, web2とそれぞれいじってしまったため途中でどの状態が一番スコアがでる(正常に動く)のか分からなくなってしまった。またrubyのコードもほぼレビューなしでmasterにマージしてしまっていたためgithubを使っていた意味がなかった。

完全にこれでした。

Try

  • ちゃんと過去問を解く。手を動かす。
  • 役割分担ちゃんと決めてみる。去年はある程度決めていた。リーダーポジションがいたのは大きかった気がする。
  • tcpdump (+ Wireshark)はデファクトになりそう(すでになってるのかも)。途中でクライアントのリクエストヘッダーが気になったけどnginxの設定だけでなんとかなると思い込んでしまった。使えるようにしておく。
  • 履歴をもっと残す。写真もっと撮る。ブログ書いてて味気ない。スコアの履歴はissueにコミットログと紐付けて残していたけど、 これめっちゃいいなと思った。
  • isucon8も参加する。このままでは終われない!!来年も同じチームで出るかは未定ですが、今年よりも成長した自分で臨みたいです。差し当たってはisucon関連ブログを読み漁って復習したいと思います。まだisuconは終わっていないし、すでにisuconは始まっている!

結果こそ残念でしたが、予選から複数台構成 + 過去にあった問題 + αでとても楽しめました。運営の皆さんありがとうございました!!チームの二人もありがとう!

あと rehash.fm もよろしくお願いいたします。

goa v1でサポートされてないint64を使う方法

たまにはアウトプットしようかと思い立ったので。 タイトルの通りです。

goa が如何に便利かはいろんな方がすでに書いているのでそちらを参照して下さい。

さてとても便利なgoaですが、designで使えるTypeは全てのプリミティブ型をサポートしているわけではありません(v2から対応するらしいです)。

例えばint64は使えないのでStringで定義してstrconvなどで変換する必要がありました。

var Account = MediaType("application/vnd.account+json", func() {
    Description("A tenant account")
    Attributes(func() {
        Attribute("id", Integer, "ID of account", func() {
            Example(1)
        })
        Required("id")
    })

    View("default", func() {
        Attribute("id")
    })
})

※viewは省略してます

生成されるコード

type Account struct {
    // ID of account
    ID int `form:"id" json:"id" xml:"id"`
}

ここでgoa v1.3で追加された Metadata(struct:field:type) を使うと生成される型を上書きすることができます。

var Account = MediaType("application/vnd.account+json", func() {
    Description("A tenant account")
    Attributes(func() {
        Attribute("id", Integer, "ID of account", func() {
            Metadata("struct:field:type", "int64")
            Example(1)
        })
        Required("id")
    })
})

生成されるコード

type Account struct {
    // ID of account
    ID int64 `form:"id" json:"id" xml:"id"`
}

シンプルですがものすごく強力な機能だと思います。 int64な配列にも変換できます。

var Sample = MediaType("application/vnd.sample+json", func() {
    Description("struct:field:type sample")
    Attributes(func() {
        Attribute("id_list", ArrayOf(Integer), "ID List", func() {
            Metadata("struct:field:type", "[]int64")
            Example([]int64{1, 2, 3})
        })
        Required("id_list")
    })
})
type Sample struct {
    // ID List
    IDList []int64 `form:"id_list" json:"id_list" xml:"id_list"`
}

ただ当然といえば当然ですが、ValidationはMetadataで上書きした型に対しては上手く使えない場合があります。 例えば

var Account = MediaType("application/vnd.account+json", func() {
    Description("A tenant account")
    Attributes(func() {
        Attribute("id", Integer, "ID of account", func() {
            Metadata("struct:field:type", "uint64")
            Example(1)
            Minimum(1)
            Maximum(math.MaxUint64)
        })
        Required("id")
    })
})

上記の用にuint64で上書きしてもMaximumの引数がintのためmath.MaxUint64を指定すると

constant 18446744073709551615 overflows int

のようにビルドエラーになってしまいます。(uint64の時点で範囲は決まってるので上のValidationは意味ないかもですが)

個人的にgoaを使っていて一番不便なところが解消されたので既存のコードもgoaに移行しちゃっていいかなと思ってきました。

以上です。

※追記(2017/12/6)

  • 配列のサンプルコードが間違ってたのを修正
  • リソース内のParamではMetadataによるtypeの上書きはできない模様
var _ = Resource("sample", func() {
    BasePath("/sample")

    Action("test", func() {
        Description(`sample`)
        Routing(
            GET("/:ID"),
        )
        Params(func() {
            Param("ID", Integer, "ID", func() {
                Metadata("struct:field:type", "int64")
            })
        })
        Response(OK, SampleMedia)
        Response(InternalServerError)
    })
})

生成されるcontext

type TestSampleContext struct {
    context.Context
    *goa.ResponseData
    *goa.RequestData
    ID int // 😱
}