┗┐<(՞ਊ՞)>┌┛

プログラミングとミニクーパーS(F56)とバイク(セロー)と酒のブログ

これからも、どうぞよろしく ~ 陸奥八仙 純米大吟醸 蔵限定 ver. ~

陸奥八仙の存在を知ったのはどうやら2015年の頃らしい。この頃は日本酒の面白さにどっぷり使っていて、いろんな店に行っては様々な銘酒を楽しんだものだった。当時はどこでもあるポピュラーな酒や缶入の日本酒から、少し日本酒が好きなら誰もが知っている高級酒まで様々な酒を一通り味わっていて、特に高級酒をよく頼んでおり、十四代や田酒などを惜しみなく飲んでいたのを覚えている。今考えるととんでもないお金の使い方だが、美酒にありつけるのが何よりも楽しく、お金に糸目をつけていなかった。


陸奥八仙自体はそれよりも前にあったようだが、関西ではあまり見なかった記憶がある。おそらく関東や東北ではもっと早い段階からたくさん流通していたのだと思うが、関西まではまだそこまで届いていなかったのではないか。


とはいえこのお酒が関西圏でも多くの日本酒ファンを魅了するにはそう時間はかからなかったろう。今では様々な酒屋や飲み屋で陸奥八仙の名前を見ることができる。陸奥八仙はラベルもわかりやすい。大きな字で「八仙」と書かれているので、遠目でも「お、あそこに八仙が置かれているな」と確認できる。飲み屋を探すとき、店前に置かれている空の酒瓶などで店のクオリティを測ることは往々にしてあって、そんなときに陸奥八仙のラベルを確認できると、一定のラインは確実にクリアしていると思え、安心して入店できたものだった。


これはかなり前の印象になるので怪しいのだが、陸奥八仙を初めて飲んだ感想としては「フルーティーでフレッシュ感が強いけど、かっちりしていてキレるな」という印象だった...はずである(書いていて自信がなくなってきた)。大体の「フルーティーでフレッシュ」というのは、飲んで口に含んだときに真っ先に抱く印象で、その後の予想としてはふんわりとした味わいを期待している。ところが陸奥八仙はその後に結構「カッチリ」としていて、そこが少し意外な風味に感じて印象深かった。


これは憶測だが、陸奥八仙の蔵は地産地消にこだわっている蔵である。酵母酒米も、当然水も現地青森のものを使っている。これによって、高級酒を飲みまくっていた自分が抱いていた予想とは違う風味を感じたのだと思う。高級酒は大体の場合山田錦を使っていたり、ポピュラーな酵母を使っていたりするので、ある程度味のテンプレートみたいなものが自身の中にあったのではないか、と推察している。



陸奥八仙の存在を知ってから6年程の月日が流れた2021年。世の中が暗いニュースばかりのまま年明けした三が日に、一本の日本酒の封を開けた。それが「陸奥八仙 純米大吟醸 蔵限定 ver.」である。


f:id:funnelbit:20210102112846j:plain


蔵限定 ver. という名前が指し示すとおり、この酒は蔵でのみ販売される。購入するには現地に行くしかなく、インターネットでの注文も全てお断りしているという。これは意地悪でこうしているのではなく、かつて蔵に足を運んだ多くの方々から「この場所でしか買えないお酒はないか」と要望が出たために、このようなお酒となっている。値段は4合瓶1本で税込み3000円程度だったはずなので、ハイグレードな日本酒に相当する。


その販売形態からかなり貴重な1本となるために、前から家にあったもののもったいなくて中々封を開けることができなかった。今回「せっかくの新年なんだから」ということで開封するに至った。


味わいとしては、期待通り爽やかなフルーティーさがあり、更にはシュワッとした発泡性を感じとれる。この発泡性も相まってか、やはりカッチリとした感じと苦味があった。この時点で「なんとなく、陸奥八仙っぽいな」という感想を抱く。最後にはキレていく。言うまでもなく旨い。そして蔵でしか買えない酒を飲んでいるのだ、という付加価値もそこに加わる。贅沢な一本である。


この陸奥八仙を醸す八戸酒造は、蔵を取り戻す苦労をした蔵としてよく知られている。もともと自分の蔵であるにもかかわらず、長い間そこで酒造りを行えない期間があった。結局裁判にまで発展した末にようやく取り戻し、今に至っている。ラインナップが幅広い蔵でもあり、フルーティーな酒はもちろん、辛口を重視した酒、4合で1万円を超える高級酒、米で作ったビール(これについては後日書こうと思う)など、様々な味わいと製法にチャレンジしている(よりしっかりとした辛口を求めたければ「男山」がある)。杜氏を含め非常に若いメンバーで構成されているので、このような面白い取り組みができるのだろう。



陸奥八仙は昔からよく飲んでいたようで、写真を振り返ると思い出深い。久々に友人とあった時。夏の暑い時期に宅飲みをした時。初めてのお店にチャレンジした時。旅行した時。様々な場面で陸奥八仙を飲んでいた。特に印象に残っているのは一人暮らしに疲れ、実家に帰っていたとき。友人の実家で陸奥八仙を飲んでいたことを思い出す。その時飲んでいたのは、陸奥八仙の黒ラベル。京都の市内で買ってきて、好きだったテレビアニメを見ながら夜遅くまで話をしたものだった。かなり前なので味はもうあまり覚えていないが、派手さを抑えた飽きにくい味わいで、長く話をしながら飲むのにはマッチしていたのを覚えている。冒頭にも書いたが、様々な高級酒を飲みまくっていたこの時代。旨い酒はたくさんのんだし、1杯の値段が笑えるものも飲んだが、結局は心を許せる中でのんびり飲む酒がどんな美酒よりもまさるのだと、若いうちから感じたのだった。

しっぽり飲みたいときにも、派手さを味わいたいときにも、酒に驚きを求めたいときにも、様々なラインナップと高い品質で安心して楽しめる陸奥八仙は、これからもずっと飲んでいくのだと思う。

f:id:funnelbit:20210117000852p:plain

Next.js の API Routes に書かれた実装のテスト

Next.js の API Routes に書かれた実装をテストしたいときを考えたい(jest)。

まずは簡単な api を作ってみる。クエリパラメータ animal=dog をつけて/api/check?animal=dog としてアクセスすると /dog にリダイレクトし、逆にクエリパラメータ animal=dog 無しでアクセスすると 400 が返ってくる API を作ってみる。

import { NextApiRequest, NextApiResponse } from "next";

// pages/api/check.api.ts
export default async (
  req: NextApiRequest,
  res: NextApiResponse
): Promise<void> => {
  if (req.query.animal !== "dog") {
    res.statusCode = 400;
    res.end();
    return;
  }

  res.redirect(
    302,
    "/dog",
  );
};

これに対するテストは以下のようにかけそう。

import httpMocks from "node-mocks-http";
import handler from "pages/api/check.api.ts";

describe("/api/check", () => {
  test("400", async () => {
    const mockReq = httpMocks.createRequest<NextApiRequest>({
      query: {
        animal: "cat",
      },
    });
    const mockRes = httpMocks.createResponse<NextApiResponse>();
  
    await handler(mockReq, mockRes);
    expect(mockRes.statusCode).toEqual(400);
  });

  test("302", async () => {
    const mockReq = httpMocks.createRequest<NextApiRequest>({
      query: {
        animal: "dog",
      },
    });
    const mockRes = httpMocks.createResponse<NextApiResponse>();
  
    await handler(mockReq, mockRes);
    expect(mockRes.statusCode).toEqual(302);
    expect(mockRes._getRedirectUrl()).toEqual(
      "/dog"
    );
  });
}

今回の API Routes は関数無名関数で export default しているので適当な名前を付けて import する。それをそのまま呼んで必要としている変数 NextApiRequestNextApiResponse を渡してあげると良い。この2つを自力で作るよりも node-mocks-http を使ったほうが一瞬でできて楽そうなので使っている。

www.npmjs.com

mockRes に処理後の状態が入っているので、mockRes のプロパティをチェックしてちゃんと出来ているか確認する感じです。

React 環境へ GraphQL Code Generator を導入

GraphQL Code Generator は GraphQL のスキーマ情報やオペレーションコードをもとにし、アプリケーションが触るコード生成を行うことができるツールです。プラグイン形式で機能追加できる特徴があり、プロダクトの環境によって様々なコード生成を行うことができます。

今回は React 環境に GraphQL Code Generator を導入する手順を紹介します。

モチベーション

GraphQL のスキーマやオペレーションコードから、フロントエンド用にコード生成するツールとして最もポピュラーなのは apollo-tooling でしょうか。というのも Apollo 自体がポピュラーであり、そのドキュメントに記載があるためにこれを利用するケースが多いと思われます。apollo-tooling でも開発に問題は有りませんが、 GraphQL Code Generator を使うとより有益になる可能性があります。

先にも述べたとおり GraphQL Code Generatorプラグイン形式で機能を追加できます。React かつ Next.js を利用している場合、React 用のプラグイン、Next.js 用のプラグインが利用できます。Vue.js 用もありますし、Angular 用もあります。他にも、プロダクトで利用されうる技術ごとに様々なプラグインも用意されています。これが意味するのは、GraphQL Code Generator はアプリケーションの構成ごとに最適な機能を提供しているために、よりプロダクトの実態に合ったコード生成を実現できるということが言えます。

プロダクト構成

シンプルに考え、以下のような構成であるとします(Next.js の構成となっていますが、Next.js 特有の GraphQL Code Generator plugin は今回利用しません)。

- src/
  - pages/
    - _app.tsx
    - index.tsx // 今回関係ある
- graphql/schema.graphql // 今回関係ある
- package.json
- tsconfig.json
- node_modules
- .next

// 今回関係ある と書かれたファイルだけが今回取り扱うファイルたちです。

index.tsx はこのアプリケーション唯一の画面でありロジックです。ユーザが投稿した記事を表示します。関連する GraphQL 部分のコードだけ以下に示します。

// index.tsx
 export const ENTRY_QUERY = gql`
   query GetEntryQuery($id: String!) {
     entry
   }
 `;
 
 ...
 const { data } = useQuery<EntryQuery, EntryQueryVariables>(
     ENTRY_QUERY,
     {
       variables: {
         id: id,
       },
       skip: !id,
     }
   );

schema.graphql は GraphQL のスキーマです。これは API 側の実装によって作成されたものです。スキーマAPI から配信しても良いのですが、今回はファイルをそのまま利用することにし、ここに置いています。

今回のような構成では、例えば以下のようなコード生成が可能です。

query や mutation などのオペレーション定義から React の Hooks を作成できる(コード量を削減できる)

GraphQL Code Generator 導入前、React 内では以下のように GraphQL のコードを書いていました。

// index.tsx
 export const ENTRY_QUERY = gql` // ENTRY_QUERY に注目
   query GetEntryQuery($id: String!) {
   ....
   }
 `;
 
 ...
 const { data } = useQuery<EntryQuery, EntryQueryVariables>( // useQuery に注目
     ENTRY_QUERY, // ENTRY_QUERY に注目
     {
       variables: {
         id: id,
       },
       skip: !id,
     }
   );

export const ENTRY_QUERYuseQuerytsx の外、例えばテストコードで使うために宣言していたものです。quey を叩くには useQuery を使い、ジェネリクスに型を指定します。

これでも問題はありませんが、GraphQL Code Generator を使うとよりコード量が削減できます。useQuery を直接使わずに通信ができるようオペレーションごとに専用の Hooks が用意されるようになり、また export const ENTRY_QUERY 相当のコードが graphql-codegen によって生成されるようになります。

 ...
 // useQuery 相当
 export function useGetEntryQuery(baseOptions?: Apollo.QueryHookOptions<GetEntryQuery, GetEntryQueryVariables>) {}
 
 // useLazyQuery 相当
 export function useGetEntryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<GetEntryQuery, GetEntryQueryVariables>) {}
 
 // ENTRY_QUERY 相当
 export const GetEntryDocument = gql`
     query GetEntry($id: String!) {
       entry(id: $id) {
         id
 ...

よって ENTRY_QUERY というような変数に入れなくとも、以下のようにできます。

 import { GetEntryDocument, useGetEntryQuery } from "generated/graphql";
 
  gql` // ENTRY_QUERY に代入しなくなった
    query EntryQuery($id: String!) {
    ....
    }
  `;
  ...
    const { data } = useGetEntryQuery({ // かつての useQuery に変わって生成された Hooks を使う
      variables: {
        id: id,
      },
      skip: !id,
    });
    ...

Enum を封印できる

TypeScript | GraphQL Code Generator にある enumsAsTypestrue にすれば、生成されるコードから enum を排除し、代わりに Union Types とすることができます。

// enumsAsTypes 設定無し
export enum Animal {
  Dog = 'DOG',
  Cat = 'CAT
}
// enumsAsTypes true
export type Animal = 
  | 'DOG'
  | 'CAT';

TypeScript の Enum は何かと話題が多いもので、気をつけて利用するよりもいっその事利用しないプロダクトも多いと思うので、こういうオプションがあるのはありがたいです。

Install

graphql-code-generator.com

npm install --save-dev @graphql-codegen/cli

npx graphql-codegen init するとセットアップウィザードが始まるので、答えていきます。

What type of application are you building?

$ npx graphql-codegen init
 
     Welcome to GraphQL Code Generator!
     Answer few questions and we will setup everything for you.
 
 ? What type of application are you building? (Press <space> to select, <a> to toggle all, <i> to invert selection)
 ❯◯ Backend - API or server
  ◯ Application built with Angular
  ◉ Application built with React
  ◯ Application built with Stencil
  ◯ Application built with other framework or vanilla JS

導入するプロダクトの利用フレームワークを聞かれています。今回は React で行っているので、Application build with React を選択します。

Where is your schema?

? Where is your schema?: (path or url) (http://localhost:4000)

GraphQL スキーマの場所を聞かれています。スキーマが URL を叩くことで得れれるなら URL、直接ファイルを触るなら .graphql の場所を指定します。今回は graphql/schema.graphql にあるので graphql/schema.graphql と指定しました。graphql/ ディレクトリ以下に複数の graphql ファイルがある場合は graphql/*.graphql とします。

Where are your operations and fragments?

? Where are your operations and fragments?: (src/**/*.graphql)

ここで要求されているのは、クライアントサイドで書かれている query や mutation といったオペレーションの定義です。今回の場合、定義は src ディレクトリ以下にある tsx にかかれています。また今後 tsx だけではなく ts ファイルにもオペレーションを書く可能性を考えて、ここに書かれているような *.graphql ではなく "src/**/!(*.d).{ts,tsx}" と指定します。

Pick plugins

 ? Pick plugins: (Press <space> to select, <a> to toggle all, <i> to invert selection)
 ❯◉ TypeScript (required by other typescript plugins)
  ◉ TypeScript Operations (operations and fragments)
  ◉ TypeScript React Apollo (typed components and HOCs)
  ◯ TypeScript GraphQL files modules (declarations for .graphql files)
  ◯ TypeScript GraphQL document nodes (embedded GraphQL document)
  ◯ Introspection Fragment Matcher (for Apollo Client)

プラグインを選択します。ドキュメントにそれぞれ書いてあるので見てみましょう。

? Where to write the output

? Where to write the output: (src/generated/graphql.tsx)

GraphQL Code Generator が生成したコードを置く場所を指定できます。tsx である必要はないので src/generated/graphql.ts とします。

Do you want to generate an introspection file?

? Do you want to generate an introspection file? (Y/n)

introspection file が必要なら Y を指定しましょう。ここでは必要ないので n とします。

How to name the config file?

How to name the config file? (codegen.yml)

GraphQL Code Generator は yml で設定ファイルを記述します(今までウィザードで聞かれていた設定はここに書かれます)。こだわりが無ければこのままで良いと思うのでこのまま codegen.yml で進めます。

What script in package.json should run the codegen?

What script in package.json should run the codegen?

GraphQL Code Generator がコード生成するスクリプトを package.json に用意してくれますが、そのスクリプト名を設定できます。今回は codegen としました。

     Config file generated at codegen.yml
 
       $ npm install
 
     To install the plugins.
 
       $ npm run codegen
 
     To run GraphQL Code Generator.

完了するとこのようなメッセージが出てきます。npm i して npm run codegen すると src/generated/graphql.ts が吐き出されるはずです。

ちなみに package.json には以下のようなものが追加されており

...
     "codegen": "graphql-codegen --config codegen.yml"
"devDependencies": {
     ...
     "@graphql-codegen/typescript": "1.17.9",
     "@graphql-codegen/typescript-operations": "1.17.8",
     "@graphql-codegen/typescript-react-apollo": "2.0.6",
...

codegen.yml は新規に作成されています。

 overwrite: true
 schema: "graphql/schema.graphql"
 documents: "src/**/!(*.d).{ts,tsx}"
 generates:
   src/generated/graphql.tsx:
     plugins:
       - "typescript"
       - "typescript-operations"
       - "typescript-react-apollo"

GraphQL Code Generator を理解していれば、ウィザードを使わずにこれらを直接編集しても良さそうです。

ESLint の設定

ESLint を設定されているプロダクトがほとんどだと思います。このままでは src/generated/graphql.ts のコードに対し ESLint から大量の怒られが発生するので、除外する設定を書いておくと良さそうです。

gnorePatterns: ["src/generated/graphql.ts"],

Enum 禁止

codegen.yml に enumsAsTypes: true を追加することで、Enum ではなく Union Types にできます。必要であれば指定しておくと良いです。

 overwrite: true
 schema: "graphql/schema.graphql"
 documents: "src/**/!(*.d).{ts,tsx}"
 generates:
   src/generated/graphql.tsx:
     plugins:
       - "typescript"
       - "typescript-operations"
       - "typescript-react-apollo"
    config:
      enumsAsTypes: true // これ

iOS「ミュージック」で再生中の楽曲情報をシェアするアプリ「The Playing」をリリースしました

iOS の「ミュージック」アプリで再生中の楽曲情報を「タイトル、アーティスト名、アルバム名、アートワーク」という構成でシェアできるアプリをリリースしました。いわゆる「ナウプレ」アプリです。

The Playing

The Playing

  • Ryo Kitamura
  • ミュージック
  • 無料
apps.apple.com
f:id:funnelbit:20200527110325p:plain

iOS 13.5 以上で動作します。

開発のモチベーションとしては、すでにたくさんの便利な「ナウプレ」アプリが世の中にあるのですが、Twitter にシェアするには認証情報を渡さないといけないのがネックに感じていました。また再生ボタンなどいろんな機能がついていて、シェアだけをしたいという用途にはいささかオーバスペックかなあと思っていて、とにかくシンプルなアプリがほしいと感じていました。

そこで、iOS にもともと備わっている「Share extension」を利用し、好きなアプリに楽曲情報を渡す設計にすることで(例えば Twitter にシェアしたければ Twitter アプリを利用する)認証云々を抜きにしたシェアを可能にしました。これによって、メモ帳に聴いている曲を「タイトル、アーティスト名、アルバム名、アートワーク」という構成で記録していくとか、メールや Slack に共有するとかも可能になっています。

アイコンはイラレでさっと作りました。このアプリはそんな大それたものではなく文房具みたいなものだと思っていて、シャープペンシルとか、鉛筆とか、そういった地味な存在ということにしたかったので、あまり主張しない地味な色味にしています。

コードは SwiftUI で作られています。

これから必ず伸びる日本酒(というか既に割と伸びてる)光栄菊の紹介

光栄菊は杜氏「山本克明」さんによって作られている日本酒である。

かつて愛知で「菊鷹」という日本酒を作っていた。いわゆるプレミアム酒ほどの知名度は無いが味は素晴らしく、ファンが大勢居た文句なしの銘酒である。4号瓶がなく一升瓶しか無いためになかなか家庭では買うことが出来ず(でかすぎて冷蔵庫に入らない、入っても大きすぎて家族に怒られるなど)、店でのみ楽しんでいた酒飲みも多いことだろう。メニューにあれば必ず頼みたい一本であった。

ところがある日、日本酒界に衝撃が訪れる。それは「菊鷹は終わる。山本杜氏が菊鷹を作るのをやめる。蔵をやめるらしい」というもの。

多くのファンが悲嘆に暮れた。「菊鷹」の味は「菊鷹」でしか飲めない。正直他の酒とソコソコ似た味の別の酒というのはあったりする。しかし「菊鷹」はこれまでの飲酒人生から代替品を導き出すことが出来ない。確固たる地位なのである。多くの人間がそう思っていたであろう。

最後の菊鷹ロットも発表され、もはやこれまで、現存する菊鷹を大事に飲もう、誰もがそう諦めかけていたその時、再び日本酒界、激震。

「山本杜氏が佐賀の蔵で酒造りを始めるらしい」

え?ほんとか!!でもなんで佐賀??という疑問は誰もが持ったことだろう。しかし再び作ってくれるとなれば我々からとしてはどこでも良い。願ったり叶ったりである。菊鷹ファン歓喜、各飲み屋、酒屋も仕入れに向けアップを始めていたに違いない。ちなみになぜ佐賀なのかというと、佐賀で休止していた蔵を復活させた、とのことである。

https://headlines.yahoo.co.jp/hl?a=20191202-03460712-saga-l41headlines.yahoo.co.jp

そして去年の暮れ、ついに山本杜氏の新作にありつくことが出来た。それが光栄菊であった。

優しいオリの風味、そこそこどっしりとした酒のボディ、爽やかな程よく熟れたグレープフルーツのような香りと酸味。それらが上手くまとまり、一度に押し寄せる。余韻も心地よく、ソコソコ重いはずの味わいが徐々に引いていくことで「もう1杯、もう1杯...」と杯が進んでしまう。

バランスが良い、とはまた違う。各部分が個性的なのになぜかまとまっているという印象を受ける。バランスの良い酒といえばやはり 新政No.6 があるが、新政がどんな人にも好かれる優しい優等生との心地よいおしゃべりタイムだとすると、光栄菊は尖ったバンドメンバーがそれぞれ好きなことをしてるが息のあっているオルタナティヴを聞いている、そんな酒であると感じる。

流行りに敏感な日本酒好き飲み屋には置いてるっぽいので、見かけたら飲んでみてほしい。

2019年京都サイゼ飲み最前線

格安で飲める「サイゼ飲み」は数年前から話題となり、静かなブームとなった。その後サイゼリヤに続く形で「びくドン(びっくりドンキー)飲み」「バーミヤン飲み」など、ファミレスでの飲酒事例が続いている。昨今では一時期ほどのブームはないが、ファミレス飲酒行為は一定の市民権を得ていると言って良い。

ところで僕は京都に住んでいるのだが、京都の人間がサイゼ飲みをするならどこが良いだろうか?それは「京都四条烏丸」一択であると断言して良い。なぜかというとこの店舗は京都唯一の「ワインが豊富」サービス実施店舗だからである。このサービスを行っている店舗は通常のサイゼリヤとは異なり特別なワインリストが用意されていることを表している。そもそもサイゼ飲みが流行した背景にはこのワインリストの存在があり、それを体験できるのは京都だとここだけなのである。

ワインサービスがあるかどうかはサイゼリヤ公式ホームページで検索できる。店舗リストの各行の最後に「ワインが豊富」というマークが有る店舗が該当する。

www.saizeriya.co.jp

今回チョイスした店舗は京都市営地下鉄四条駅にアクセスする途中にある。飲んだあとにもすぐに電車に乗れるという異常なまでの好立地である。

噂のワインリストの今

さて、なにはともあれワインである。ワインサービス提供店ではワインリストが存在しており、店員に「ワインリストください」というと奥からリストが出てくることから裏ワインリストとも呼ばれていた。だが現在(もしくはこの店舗のみの事情かもしれないが)では普通にワインリストが席に備えられている。

ポップなデザインでレギュラーメニューの顔をしているためもはや裏な感じはない。念の為店員に聞いてみたがこれだけとのことであった。ラインナップも昔ほどないようである。少し残念だが致し方ない。とりあえずこの中で一番高い赤ワインを頼んでみる。

レアレとかいうやつがきた。ここはファミレスなので頼んだワインについて教えてくれる人間がいない。メニューとラベルがすべての情報である。詳細が不明。 飲みまくって破滅したい場合は「マグナム」を注文するとよいだろう。1.5リッターで1100円という破格である。狂っていると言って良い。

安ラインナップに紛れる高級フード

食べ物については、まず「エスカルゴのオーブン焼き」。399円。それとフォッカチオ。199円。

エスカルゴのオーブン焼きはアヒージョみたいなやつでパンを付けて食べるのをすすめる。フォッカチオが意外に美味しい。目隠しして食べたら誰も199円だと思わないであろう。

さて、現在(2019/12/21)サイゼリヤではとある目玉メニューが話題である。一つは「あったか具だくさんポトフ」でもう一つが「アロスティチーニ」である。どちらも食べたかったのだがポトフは売り切れてしまったため、「アロスティチーニ」のみ注文。 「アロスティチーニ」は399円する。焼き鳥屋ではそれでも安い気がするがここはサイゼリヤなので量を考えると富豪の食べ物である。サイゼリヤには「ハンバーグステーキ」があるがそれと同じ値段ということを考えると強気の価格ということがわかるだろう。学生の頃は間違いなく選ばなかった一品だが、いまや社会人となった僕にとってはもはや恐れるに足りない。一緒についているスパイスはクミンのような味がする。つけて食べるとなかなかうまい。ちょっくらジャンキーな味だがそれが逆に良かったりするのだ。

「フリウリ風フリコ」。299円。フとリが多い。ポテトグラタンのような料理である。ワインとチーズは確実に合うのであると嬉しい一品。

「ハンバーグステーキ」399円。スパム(英語: SPAM)のような味がする。手放しにうまいと言える品ではないが、399円で肉の塊、ポテト、目玉焼きが食べることができるのは大きい。

会計は?

今回の会計である。意外と高いと思ったかもしれないがボトル一本頼んでいることを思い出していただきたい。またこの価格は二人分であるために2で割れば2100円程度である。ボトル一本頼んでこの価格は驚異的と言える。

また安さは勿論だが、以下の点もメリットとして上げることができよう。

  • 席が広い
  • 大体冷凍なのでやたらと早くフードが来る
  • 子どもも入店可能

勿論所詮はファミレスなのでフードは手放しに美味い!!とは言えないが、ファミレスで飲むというエンタテインメント性には惹かれる方は多いのではなかろうか。また社会人になってから行くと富豪プレイができて愉快である。気軽に行けるので、興味のある方はぜひ体感してほしい。あと他にも面白いファミレス飲みがあればぜひ聞かせてもらいたいところである。

2019/12/24 追記

サイゼリヤがサイゼリバーミヤンがバーミンになってので修正しました。申し訳ない。許してほしい。

ブラウザで開きっぱなしのお店、観光情報ページを保存する iOS アプリ「トコロバコ」をリリースしました

タイトルの通り、開きっぱなしのお店、観光情報を保存する iOS アプリ「トコロバコ」をリリースしました。

f:id:funnelbit:20181202140848p:plainf:id:funnelbit:20181202140841p:plain

立ち飲み屋やら旅行やらが好きなので、よくウェブで情報を検索するのですが、その後にページを開きっぱなしにしていました。行くかもよくわからない場所をブックマークに入れるには大層な気もするし、メモするにしても書くのもその後探すのも面倒くさくて、それだったら開きっぱなしでいいや、と思ってたんですよね。

ところがそんなことをしてるとどんどん開きっぱなしのページが増えていって、閉じたいのですが、一応また見るかもしれないから置いとくか、となってしまい、結局そのままになるという状態でした。

「じゃあ簡単にメモできるアプリを作るか〜」と思って作ったのがこのアプリになります。ページを保存できるだけではなく、もしも住所がページ内にあれば、住所の候補として表示。保存時に選択できます。アカウントも必要なく、アプリを開いたらすぐに利用できます。

まだ作りが甘いところもあるのでこのタイミングで出すのか悩みましたが、そんなことをしているといつまで経ってもリリースできませんので、まずはリリースを優先しました。今後は少しずつ改良を加えていく予定です。

よろしくおねがいします。

https://itunes.apple.com/us/app/%E3%83%88%E3%82%B3%E3%83%AD%E3%83%90%E3%82%B3/id1443138701