あおみかんのブログ

フリーランスのIT系エンジニア。ゲーム制作スタジオ4th cluster代表。

「どうぶつタワーバトル」がヤバい

ちょっと余談から入ります。

先日、星のカービィシリーズスマブラシリーズを手がけた桜井さんの記事が上がってました。

news.denfaminicogamer.jp

以前もCEDECでの公演内容がGIGAZINEに載ってたのですが、Web向けに丁寧にスライドやスクショを含めて校正されたものになっていました。

タイトルと何が関係あるのか。と言われそうなので今回のトピックを明確にしてみます。

一見すると、テキトーにゲームジャムで作ったようにも見える「どうぶつタワーバトル」ですが、桜井さんが指摘しているゲーム性の本質を綺麗に突いている、っていう話をしようと思います。

どうぶつタワーバトルとは何か

どうぶつタワーバトル

どうぶつタワーバトル

  • Yuta Yabuzaki
  • ゲーム
  • 無料

play.google.com

どうぶつタワーバトルは、iOS/Android向けの対戦ゲームアプリです。 Unity製っぽいです。

作者のYuta Yabuzakiさんは「レモン メロン マカロン」などのちょっとシュールでシンプルなゲームを作っている方…のようです。詳しく知らないですが、今回突然ゲームを作られた訳ではなく、何作も作ってきた方だという事だけは知っておきたい部分ですね。

「リスクとリターン」に基づいて考える

記事の全編にわたって「ゲーム性の本質とはリスクとリターン(リワード)である」という事が語られています。

ルールを作ってPvPにさえすれば、ある程度は満たせる事が多いと思うんですが、どうぶつタワーバトルはこれを高い精度で満たしているように思います。

  • 安定させて置くと、対戦相手もその上に置きやすい(リスクを取らないとリターンも少ない)
  • 不安定に置くと、対戦相手はその上に置きにくい(自分が負けるリスクを負うことで相手を倒しやすいリターンを得る)

極めてシンプルですが、綺麗にリスクとリターンが表裏一体になっていると思います。

「遊びと人間」に基づいて考える

さらに、最初に上げた記事の3ページ目には、4つの「人間の持つ遊びの要素」が「遊びと人間 (講談社学術文庫)」から引用されていました。孫引きで好ましくないですが、構成の都合上、ここにも引用していきます。

1. アゴン=競争:対戦や勝負事、受験やテーブルゲームなど 2. アレア=偶然:ギャンブル、じゃんけん、ダイスで振って決めるのものなど 3. ミミクリ=模倣:ごっこ遊びや、演劇、テーブルトークロールプレイングゲームなど 4. イリンクス=めまい:ブランコやジェットコースターなど、感覚に訴えるもの

こう並べてみると、どうぶつタワーバトル、かなりシンプルでありながら、4つ全てをかなり高い精度で満たしていると思います。 沿うように書き下してみます。

  1. ネット上でマッチングする対戦ゲームであり(アゴンを含む)
  2. どのどうぶつを引くかはランダムであり(アレアを含む)
  3. 現実のどうぶつの写真が積み上げるモチーフになっている(ミミクリを含む?…こじつけ気味ですが…)
  4. 現実の物理法則に沿ってゆらゆら揺れたり落ちたり綺麗に乗ったりする(イリンクスを含む) *1

如何でしょう。ミミクリはまぁ、ちょっと的外れてるかもしれないんですけれど。

ジェンガの話もしておく

ていうかジェンガじゃん、って言われる気がしたので先にちょっと書いておきます。

ジェンガとの差分は、案外結構あります。

  • どうぶつ出現のランダム性によって、下手でも勝てる余地がそこそこある
  • 負けた時に「ガラガラガラッ」ってならずに間抜けにどうぶつが崩れていくだけなので、そんなに不愉快じゃない*2
  • 得意不得意が大きく分かれる3次元的な指先の器用さは求められず、目測と想像力のゲームになっている
    • 特にジェンガは「指先器用ゲー」だと思うんですが、どうぶつタワーは「目測&予測ゲー」だと思います。このふたつ、結構違う。

おわりに

そんなわけで、どうぶつタワーは一見カジュアルな(だけの)ゲームに見えますが、シンプルながら要点を押さえたゲームだという話でした。

「どうぶつ」で検索された結果だろうというのは一因だと思いますが、でも、流行るだけの理由がありますね。

個人的には、全体的にシュールな感じがかなり好きです。

*1:正しくはニュートン力学の近似に沿って、となりますが

*2:個人差あるけど、数人の友人の前で何かを失敗するのは、そんなに愉快では無いと思います

「どうぶつの森 ポケットキャンプ」の「なぜ」を肯定的に考えてみる

先日エントリを書いたら、想定よりもずっと沢山の人が読んでくれたので、引き続きこのタイトルについて考えてみようと思う。

aknep.hatenablog.com

改めて言及するけれど、初代「どうぶつの森」からGC版2作目「どうぶつの森e+」までが好きだった僕にとっては、受け入れがたいゲームシステムだったのは率直な感想だ。

ただ、ブコメでも言ってくれた人がいたように、(規模はともかく)ゲーム制作をしているのであれば、否定的に見るだけでなく「面白いと言っている人がいるのは何故か」についても検討するべきというのは、ご尤もな指摘だと思うし、そうしてみようと思った。

IGNからもポケ森についての記事が出ていたが、大人の書き方であったし、僕の書いた記事よりもずっと深い考察をしていて素晴らしいものだったので紹介したい。

jp.ign.com

今回の僕の記事も、先のIGNの記事と着眼点が被る部分が出てくる事は避けられない、なるべく僕独自の洞察も含めるので、お許し願いたい。

あらためて僕とこの記事の立ち位置

前回の記事では、最初の印象として「つまらない」と感じたので、その理由について分析してみた。

ただ、それは僕が「どうぶつの森」の大ファンであり、過剰な期待感と共にプレイした事も理由の一端だと思う。

その時の盛り上がりと言えばこんな感じ。

そういう訳で、否定的なエントリを書きつつも、引き続きプレイしてレベルも19になった僕が、今ならリリース当初の過剰な期待感も拭えた頃合いだし、個人的にゲームへの洞察を深めるため、務めて肯定する方向でこのゲームについて考えを深めてみたい。*1

典型的な「スマホゲー」UIとの融合

まず、僕は典型的にスマホゲーらしいUIが苦手だ。

中でもゲームUIというよりもスマホのアプリUIっぽいものは、ゲームの世界観や、プレイヤーキャラクターになりきるという観点での一種のナラティブを損なう傾向が強いと考えている。

パズドラが大ヒットして以降、iOSのTabBarを元にしたような下部のタブUIが普及したが、特にこれが大の苦手だ。

「ゆけ!勇者」( xHachiApps )みたいな、全編がスマホUIで、スマホUIから勇者を操るっていう概念が一貫しているタイトルならまだしも、そうじゃないタイトルでやられると凄くモヤモヤする。

でも、分かりやすいのは間違いない。ただでさえプレイ方法をユーザーに理解してもらうのが難しいタッチパネルにおいて、普及しているUIを採用したのは、むしろスマホでしかゲームをプレイした事がない若いユーザーへの歩み寄りだということも強く感じる。

前提が長くなったが、このUIに関しては結構大事な話がある。

それは、ポケ森のUIを開発した方は間違いなくこれらの話は正確に押さえていて、その上でなるべくプレイヤーとプレイヤーキャラクターとの一体感(≒ナラティブ)を損なわないように注意している。

タブの一番右のメニューを開いた時に、プレイヤーキャラクターがスマホを弄っているところがそこだ。これはすごい。プレイヤー本人がスマホを弄っている時、プレイヤーキャラクターもスマホを弄っている。

大半のゲームシステムでは、プレイヤーが操作している時にプレイヤーキャラクターが対応する行動をしているというような対応関係が綺麗に出来ている方が良いと思う。これと相性のすごく悪いであろうタブUIを上手くすり合わせたのは、偉業と言って良いと思う。

なぜ自由度を下げたのか

前回のエントリに書いたとおり、ポケ森は本編に比べて自由度をかなり下げている。これは間違いなく意図的なものだ。逢えるどうぶつがレベルに応じて解放されていく一連のゲームシステムはこれまでのどうぶつの森シリーズにはなかったもので、今作でわざわざ追加したものだからだ。

では、何故自由度を下げたのかというと、1つはスマホゲームユーザーへの歩み寄りだと思われる。これに加えて、スマホ向けのゲームは細切れの時間でプレイすることが多い。一回のプレイ時間平均は5分とかそんなものだと思う。こうなると、5分の間に何らかの楽しみが見い出せるようにしたい。必然的に、目標をシステム側から明示し、その目標を短時間に少しでも進められるような仕組みが欲しくなる。

実際プレイしていても、作業の合間のちょっとした休憩時間などに「何しようかな」と迷っているうちに休憩時間が終わってしまうのではなく「とりあえず虫を捕まえとくか」といった形で、小さな楽しさが実現されていると感じる。

なぜリワードを明確にしたのか

これは自由度の件とほとんど一緒になるが、細切れの時間でプレイした場合に、そのプレイの間に何も嬉しいことがないと、楽しめないと思う。

もしコンシューマ機のどうぶつの森シリーズのようなゲームシステムのままにしていたら、他のどうぶつの所に運ぶように依頼された物を受け取ったあたりで時間切れ。次に起動した時には何故そのアイテムを持っているのか、誰の所に運ぶんだったか忘れてしまう。よく覚えていたとしても、リワードによるカタルシスが得られるのは、宛先のどうぶつの所に持っていた時だけで、受け取った時にはカタルシスが得られない。

まとめると、短いゲーム時間でも多少のカタルシスを得られるように設計した結果が、あの明示的な目標とリワードだと思う。

なぜいくつかの要素をカットしたのか

これは単に開発リソースの問題や、そもそもどの程度ヒットするか分からないタイトルに投資できる金額には限りがあるとか、そういう理由でしかないと思う。

化石やハニワがない事や、キャンプ向けの家具を中心に作り直したりしなかった理由は、単にこれだと思う。

任天堂ほどの巨人でも、取れるリスクには限りがある。

なぜサーバーが1日程度で軽くなったのか

まじ凄い。ネタ半分で頭に「なぜ」ってつけてるけど、実際これは任天堂さんが少しは情報公開する気がするから、楽しみ。

特にDBをどうしてるのかは気になるけど、マリオランもGCPだったし、まぁBigTableなのかなぁ。などと邪推している。

何にせよ、特にWiiU以降、任天堂さんはインターネットやクラウドコンピューティングに詳しくなっている感じがして、技術への投資を怠らなかったことが、あの劇的な速度向上に繋がったのは間違いないと思う。

なぜキャンプにしたのか

これが結構難しくて、憶測でしかないんだけど、僕なりの検討が進んだ。

そもそも家具は家の中に置くものばかりになるのに、キャンプという状況設定にしたのは結構妙だ。わざわざ変えた理由があるように思う。

これは、先のナラティブの話だ。プレイヤーとキャラクターの操作と行動は一致していた方が良い。この延長で、キャラクターの喜怒哀楽はプレイヤーの喜怒哀楽と一致していた方が良いし、おかれた状況が一致していると何だか自分と画面の中のキャラクターが近い感じがすると思う。

僕の推測を言うと、スマホゲームは、外でやる場合が多い。これだ。

外を出歩いている(かもしれない)のに自分の村やその中の自分の家で家具を配置するのは変じゃないか。プレイヤーが外を出歩いているなら、プレイヤーキャラクターも外を出歩くべきじゃないか。という事なんじゃないか。

なぜ面白いのか

ここまで、特にポケ森で変更・追加された要素がなぜなのかについて僕なりに分析してきた。セルフカウンターエントリとして、あえて「なぜ面白いのか」について検討してみる。

より正確には、面白い部分はどこか、だ。

個人的には、やはりこのゲームのキモになるのはネットでSNSの友達と繋がることが出来る部分だと思う。

だからプレイヤーキャラクターを女装させたスクショがTwitterで回ると面白いし、バザー売り物をスクショで流して宣伝するのが楽しい。

特にバザーは非常に面白い要素だと思う。いっそもっとソーシャル優先にして、ユーザーによって手に入るアイテムが偏るようにしても良かったのかもしれないが、それはそれで一人で遊べないタイトルになってしまうから難しいかもしれない。

また、Miitomoでも非常に気をつけていたように思う部分だが、すこしでも他のユーザーを不愉快にしかねない要素がことごとく排除されているのもポイントだと思う。どうしても他のユーザーを不快にするような事はしてしまいがちだ。これはシステム的に排除した方が良い。

本編どうぶつの森では、どうぶつ同士のケンカもあったし、手紙に自由な事が書けたし、音楽を作れたり洋服を作れたりしたが、これらを(少なくとも最初は)排したのは、こういった不快な行動をさせないためだと思う。

ひとりよりふたり、ふたりよりよにん

どうぶつの森64版のキャッチコピーは「ひとりよりふたり、ふたりよりよにん、よにんより・・・たーくさん」というものだった。

そして「どうぶつの森」のジャンルは「コミュニケーション」だ。(任天堂の公式ページより ニンテンドウ64版『どうぶつの森』

e+ではSDカードを使ってスクリーンショットを共有できたりと、ネット上でのコミュニケーションを意識していた節がある。 ……まだまだSDカードも高価だったし、SNSも発達してなかったし、あまり見かけなかったけれど。

今回のポケ森の大ブームは、こういった初期シリーズからの悲願が叶った形とも言えると思う。

特に中心的スタッフの野上さんや江口さんのインタビューでは、当初からコミュニケーションを主眼にしていたようだ。

(参考: 『どうぶつの森e+』開発スタッフ インタビュー

僕は最初にプレイした時の印象で、どうぶつの森のコンセプトを「スローライフ」だと考えていたけれど、本来のコンセプトが「コミュニケーション」だったなら、今回のポケ森には納得行く部分も多い。

Switchで出すと思われる新作には、ポケ森の良さと旧シリーズの良さを上手に織り交ぜたものになって欲しいと、一方的な期待であるのは承知の上、発表もされていない今から待ち遠しい気持ちだ。

*1:矛盾だとか手のひら返しだとかと叩き始めるはてなーが出てくるに50000ベル

スタンディングデスク環境の紹介

紹介、とえらそうに言いつつ、さっき組み立てたばかりで、長期的にどういう影響が出るかはまだ分からないんですが…。

簡単にメモ書き程度に紹介しておきます。

必要なもの

  • スタンディングデスク
    • 普通のデスクを底上げしたり何か上手いことやってる記事も見かけましたが、案外安くて良いものあるので買った方が楽そう。
  • 靴やサンダル
    • 素足でずっと立ってるのは辛いので、何らかの室内履きがあると良いです。ナースサンダルとかも良いらしいけど僕はクロックスにしてみた。
  • ディスプレイ
    • 個人的に24インチ以上のものを勧めます。 ノートパソコンを直接見ると、長時間作業できる姿勢にするのが不可能なので、買いましょう。 そんなに高くないよ。

オススメのもの

上記のそれぞれ、オススメを貼っておきます。

僕は100cmのにした。

医療用クロックスにすると静電気が起きにくくて良いっぽい。

まぁ安定の。もっと安いのでも良いと思う。

コツとか

先に上げたデスクのメーカー「バウヒュッテ」さんが、スタンディングデスクの高さの紹介ページを用意してくれてます。

ただ、このページの上半分の自動計算じゃなくて下半分にある「立ったときに腕が90度になるように」という基準でチューニングすると良いです。

www.bauhutte.jp

僕は上に貼ったデスクのキーボードエリアにMacBook Pro、上にディスプレイ、という形にしてます。 こうすると、お高いキーボードとマウスを買わなくても良いのが嬉しいですね。 画面はミラーリングで本体側の輝度を下げて見えないようにしてます。

やってみた感想

いま住んでいる家、自室が狭いんですが、イスがなくなると結構広くスペースを使えるんですよね。盲点でした。

足下にカバンなどを置いておいても邪魔にならないし、スペース上の都合も良い感じです。

ただ、この記事を書いてる間にも徐々に疲れてきたので、オフィスなどで気軽に横になれるスペースが用意できない場合は、扱いにくいかもしれません。 逆に、自宅でベッドがある部屋にデスクも置くような場合はすごく良いと思います。

「どうぶつの森 ポケットキャンプ」は何故つまらないのか

このエントリを読む前に!

(11/23 22:32 追記)

この記事は、あくまでプレイした上で楽しめなかった人が納得するためのものです!

普通に楽しめてるって人は、こんな記事は気にせず楽しむ方が良いと思います。まわれ右!

(11/23 22:32 追記終わり)

以下、本文です

とうとう出ましたね、期待のタイトル「どうぶつの森 ポケットキャンプ」!

21日の夕方に配信開始されてから、速攻でDLしてプレイしてみたんですが、正直言って期待外れでした。

僕も小規模ながらゲームを作っている身として、なぜこのアプリがゲームとしてつまらないのか、自分なりに分析してみたので簡単に文章にまとめてみます。

どうぶつの森は何故神ゲーなのか

アプリ版のどうぶつの森ポケットキャンプ(以降「ポケ森」と表記)がつまらないという議論を頭ごなしにせず、まずは元々のシリーズタイトル「どうぶつの森」がいかに面白いゲームだったかを分析します。

ここでは、僕の記憶に根強い64版初代とGC版の2タイトルを元に書きますが、基本的には3DS版「とび森」まで一貫していたと思います。(※僕はDS版を除く全タイトルプレイしました)

自由度と目標設定

ゲームのデザインにおいて、目標を設定しそこに向かってプレイさせることはひとつの重要な要素と言われています。

ドラゴンクエストなら「りゅうおうを倒す」ことだし、マリオなら「ピーチ姫を助ける(ためにクッパを倒す)」ことですね。

スプラトゥーンなら「強くなってイカすイカになる」って所でしょうか。上記に比べると、少しユルめですね。

そんな中、どうぶつの森の冒頭からのゲームプレイの流れはこんな感じです。

  1. どうぶつたちが住む村に電車でやってきた主人公は *1
  2. たぬきち」に言われるがままに家のローンを組まされて
  3. 軽いバイトで稼ぎながら、どうぶつたちと知り合い
  4. 家を大きくしつつ村のどうぶつたちと仲良くなりつつ
  5. 暮らしていく

この中で、目標が設定されているのは、せいぜいたぬきちに関するくだりくらいのものです。 *2

結局、どうぶつの森というのは「好きに(のんびり)暮らす」というゲームであり、もはや旧来的な意味では「ゲーム」と言って良いのか不明ですが、とにかくあの村は居心地の良い「場所」でした。

徹底した「自由」

どうぶつの森の自由は徹底的でした。

たぬきちに負わされた借金を返す方法は、僕がいまパッと思い出せるだけでも以下のものがあります。

  • バイトでどうぶつたちに家具とかを配達する
  • (バイト以外でも)どうぶつのお願いを叶える(と何かがもらえるので売ったりする)
  • ハニワや化石を掘って売る
  • 果物を取って売る
    • 現実のともだちやどうぶつたちから特産品以外のくだものを貰って埋めて増やす果樹園スタイル(500ベルで売れる)
  • 釣った魚を売る
  • 虫を捕まえて売る
    • アクションが上手いならハチも捕まえれる!
  • あいことば手紙 *3
  • 兄弟など家族から何かを貰う *4

まだ2,3個くらいは手段がありそうですが思い出せないのでやめます。

そして、たぬきちの借金については返さないという選択肢すら、どうぶつの森では許されているんです。

借金を返さなくても村の時間は進んでいくし、ゲストのじゅうたん屋やボッタクリ家具やうらない屋は訪れます。たぬきちが怒ってやってくるような事もありませんし、普通に商店では家具も道具も売ってくれます。*5

おくゆかしいリワードたち

目標なくゲームプレイをして何が楽しいのか。という事は気になるポイントだと思います。

その1つが、ある種の「リワード」であり、それらが露骨でなく非常におくゆかしかった事にあると思います。これも箇条書きします。

  • どうぶつが素直に喜んでくれる
  • 村が発展していく
  • 金の道具が手に入る
  • 岩を叩くとたまにお金が手に入る
  • 埋まってるものを掘ると高価な化石が手に入る(ことがある)
  • 空を飛んでるプレゼントを追いかけるとたまに木にひっかかって、木を揺すると手に入る

これら、充実したリワードのどれもが、明示的に表になっていて目標を管理されるようなことはなく、自然とゲームプレイしているうちに達成されるのがポイントです。

これらのリワードはゲームプレイの目的や目標ではないのです。プレイヤーは、意識することもありますが、これらのリワードだけを追い求めてプレイするのではなく、あくまでベースは「好きに(のんびり)暮らす」ことです。

長所をことごとく破壊したポケ森

ここまでの文章を読んで、ポケ森をプレイした人なら、もう僕が言いたいことは分かると思います。

ポケ森は、これらの長所を完全に破壊してしまっています。ざっと書けば十分でしょう。

  • 明示的なゲーム目標(左上に常に出てくるレベルの概念、可視化されたどうぶつの好感度、リストアップされたタスク類、etc…)
  • しずえによって徹底的に管理されるTODOとリワード *6

やんわりとした目標の中で、小さな目標や目的を自分で見つけていくゲームだったオリジナルシリーズと比べて、ポケ森は日々やることを徹底的に明示化することで、ゲーム体験の自由度を圧倒的に下げてしまいました。

スマホゲームユーザーは文章をあまり読まないとか、目標を明確にしないとプレイしてくれないとか、色々と彼らがなぜこのデザインにしたか、推察することも出来ます。

でも、つまんないもんはつまんないし、俺はこのスマホアプリは、期待外れの駄作だと思う!

おわりに

つまらないゲームはつまらないから儲からない、面白いゲームは面白いから儲かる、そういうシンプルな世界に戻って欲しい。

僕は任天堂の作るゲームが好きだし、どうぶつの森はその中でも思い入れの強いタイトルです。それだけに、今作は認められない。

もしポケ森の収益が良いものでも、任天堂がそっちに舵を切らないことを願います。

*1:僕はみしらぬネコが好きですが最近のタイトルでは冷遇されてますね

*2:余談ですが、本来「どうぶつの森」シリーズでは「みしらぬネコ」が「ここでは何しててもいいし、のんびり暮らそう」的な事を言うのが、最重要な目標設定だと僕は考えています。DSかWiiのあたりでみしらぬネコを削った時点から、徐々にゲームシーケンスは壊れていったというのが僕の考えです

*3:64における手紙のあいことば解析は、ほぼチートでしたが、ある種の面白さがあった

*4:ひとりよりふたり

*5:返せば商店が繁盛して取扱物品が増えるけど、それはそれ

*6:しずえのキャラデザは好きですが、ポケ森での彼女の役割はことごとく、どうぶつの森を悪い意味でソシャゲ化する場面に使われていて残念です

Laravel(5.4)で、バリデーションエラーをフォームにリッチに表示したい時のサンプル(laravelcollective/Forms&HTML使ってる場合)

今日ふとした案件でLaravel触ってみたのですが、Railsのsimple_formにあるような、モデルのバリデーションでコケてる場合にinput要素のクラスにhas-error を足す良い方法が見当たらなかったので、ざっと作ってみました。

// app/Helpers/FormHelper.php
<?php
namespace App\Helpers;

class FormHelper
{
    public static function text($name, $errors, $options=[])
    {
        if( empty($options['class']) ){
            $options['class'] = '';
        }
        if( ! empty($errors->first($name)) ){
            $options['class'] .= ' has-error';
        }
        return \Collective\Html\FormFacade::text($name, null, $options);
    }
}

まず、これが今回のメイン。オプションでclass渡してないときに先頭に半角スペース入るけど、別に害がないのでこのままで良いかなと思ってる。

text以外にも使いたいものがあれば適宜勝手に定義すると良いです。 (PHPメタプログラミングについて調べるほどの情熱はなかった)

次に、このクラスにalias貼る。

// config/app.php
// 'aliases' => の後に以下をそれっぽく追加
[
  'FormHelper' => App\Helpers\FormHelper::class,
]

ここまで来たら、あとはblade viewの中から使うだけ。

// form.blade.php
// こんな風に使う
        {!! Form::model($inquiry, ['route' => ['inquiry.preview'], 'method' => 'put']) !!}
            <div class="form-group">
                {!! Form::label('title', 'Title') !!}
                {!! FormHelper::text('title', $errors, ['class' => 'form-control']) !!}
            </div>
            <div class='form-group'>
                {!! Form::submit('プレビュー', ['class' => 'btn btn-primary form-control']) !!}
            </div>
        {!! Form::close() !!}

ちなみに当然だけどコントローラ側で ['inquiry' => new Inquiry] っぽいことする必要はある。

モデル必要なければ Form::model じゃなく Form::open 使えば良いだけ。

明示的に $errors を渡してるのがダサい。 $errors の取得については、もっと賢い方法があるかもしれません。 Laravelに詳しい人いたらコメントくれると嬉しいです。

以下、参考にしたリファレンスなど:

docker公式イメージのタグのリストを取得する

元ネタの記事は以下のものです。

DockerHubのイメージのタグ一覧をコマンドで取得する | Mazn.net

本記事は、ちょっとだけ説明を足したり自分の環境向けにコマンドを弄ったメモです。

yumみたいに簡単なコマンドがないか調べたんだけど公式の方法は用意されてないみたいなので以下のようにする。

僕はMacOSX上のzshで実行してるけど、まぁマトモなシェルが動く環境なら動くんじゃないかな。

curl -s https://registry.hub.docker.com/v1/repositories/php/tags | json_pp | grep name | grep 5.6.30

この例では、公式のphpイメージ https://hub.docker.com/_/php/ のタグをリストアップして、その中で名前に5.6.30を含むものを表示している。

phpの部分に別なパッケージ名を入れれば別なパッケージ向けで動くみたい。

json_pp は入れとくと便利なので入れておくと良い。

meta_tags を使ってRailsアプリを楽にOGP対応する時のサンプル

表題の通りの事をやりたいケースって多いと思うんですが、いまいち分かりやすいサンプルが見当たらないので、ざっと書いとく。

やりたいことは、重複コードをなるべく減らして、楽にOGP対応すること。ついでに面倒なmetaタグのtitleとdescriptionも良い感じに設定すること。

前提

# Gemfile にて
gem 'meta_tags' 

で、bundle (install) しとく。

# application.html.slim とかのレイアウトファイルで以下。 _header.html.slim とかに分離してたらそっち。
ruby:
  og = {
    url: request.original_url,
    type: 'website',
    # こう書くとtitleメソッドで入れたのが使われるらしい
    title: :title,
    site_name: 'OGPの下に出るサイトの名前',
    # 画像は置き場所にあわせて適宜
    image: request.scheme + '://' + request.host + "/ogp.png",
    description: :description,
  }
head
  = display_meta_tags site: 'デフォルトのサイトの名前', description: 'でふぉるとの説明文', fb: { app_id: ENV['FACEBOOK_APP_ID'] }, og: og

ogを変数に入れてるのは単に可読性の都合です。

あとは、個別のページのviewで以下のようにする。

# show.htm.slim
ruby:
  # まぁ何か以下のような感じで使いたい変数を入れる。
  title @product.name
  description @product.description

  set_meta_tags og: {
    image: @product.image.url
  }

注意事項とか

こうすると、 (ブラウザのタイトルバーに出る) title 要素には "デフォルトのサイトの名前 - #{@product.name}" と出る。しかし、OGPのタイトルの部分には @product.name が出る。 ここはOGPとブラウザで役割違うと思うし、僕はこれで良いと思ってこうしてるんだけど、両者を併せたい場合はちょっと面倒。 以下のモンキーパッチが使えそう。

Open Graph og:site_name getting merged with title · Issue #119 · kpumuk/meta-tags · GitHub