valid,invalid

関心を持てる事柄について

チョコレート好きな人に薦めるチョコレート

最近食べて気に入ったチョコレートのうち自信を持って推薦できるものたち。

Guido Gobino

イタリアトリノの老舗ジャンドゥーヤチョコレート専門店。

ジャンドゥーヤならここ。ジャンドゥーヤはナッツのペーストとチョコレートを混ぜたお菓子のことで、香ばしさと甘さの一体感が楽しめるのが特徴。

国内では高島屋オンラインなどで購入できる。

www.takashimaya.co.jp

箱がかわいい

Frederic Blondeel

ベルギーのショコラティエ 兼 焙煎士のFrederic Blondeelによるチョコレート。

複数の産地のカカオが楽しめるボンボンショコラのセットがおすすめ。特にGianduja / Noir (ベトナム産カカオ80%)、Earl Grey(トリニダード産カカオ55%)、Sea Salt(ペルー産カカオ70%)が気に入った。

焙煎力の良し悪しは正直素人舌ではわからないのだけど全部自分でやるというクラフトマンシップが熱くて推したい。

公式オンラインショップがある。

www.frederic-blondeel.jp

コンパクトな6個入り

CENTHO

こちらもベルギーのチョコレートブランド。

塩キャラメルとチョコレートの組み合わせならここがベスト。特にスモークした海塩を使用したスモーキーキャラメルは味と香りの総合力で優勝。

真偽不明だが最近の催事の現場ではすぐに売り切れてしまうという情報もある。

公式オンラインショップがある。

centho-japan.jp

Benoit Nihant

ベルギーのチョコレートブランド。

ここはチョコレートは食べたことがなくクッキー オ モールソード ショコラだけをいただいたのだが、そのクッキーが焼き上がりの直後でとてもおいしかった。

クッキーというよりはベイクドショコラのような口当たり。数種類の食感とベリーぽい酸味が忘れられない。

クッキーは店舗限定だがチョコレートはオンラインショップから購入可能。

benoitnihant.jp

向かって左手のやつがクッキー。自宅で温めてもおいしい

(番外編) ヴァローナ

ここまではショコラティエによる作品を紹介したが唐突に、著名なフランスのショコラブランドであるヴァローナの製菓材料を紹介する。

ヴァローナはタブレットや箱詰めの製品も多くあるが、ショコラティエやパティシエに愛用される製菓材料も数多く揃えている。

その製菓材料のうち、100周年記念製品としてリリースされたKOMUNTU 80%を紹介したい。これは製菓材料なので加工してなんらかの菓子になるべくして生まれているはずなのだが、加工せずに単体で食べてもとてもおいしく、めちゃめちゃ強いカカオ感を味わえる。

2022年9月から1年間の「コムントゥ」の利益全額はカカオ生産者に還元されるとのことなので積極的にエシカル消費していこう。(なぜか公式サイトでコムントゥが見つからなかったので富澤商店のリンクを貼る)

tomiz.com

このほかにもMANJARI 64%やCARAIBE 66%も単体で食べてもおいしいのでおすすめ。


意図せず選んでいたが好みがベルギーに寄っているようだ。

OpenAIのテキスト生成(GPT-3)APIをプログラムから呼び出す方法と料金

ChatGPTやDALL・E2で有名なOpenAIのAPIを呼び出す方法について*1

一般的なWebサービスと大して変わらず、以下の2ステップで行う。

  1. API Keyを取得
  2. API Keyを用いてAPIを呼び出す

1. API Keyを取得

https://platform.openai.com/ からsign upし、 https://platform.openai.com/account/api-keys からAPI Keyを発行する。

2. APIを呼び出す

利用できるAPIの一覧や使い方は以下にまとまっている。

platform.openai.com

呼び出すのはプログラムはなんでもよいが、ドキュメントにはcurl, Python, Node.jsのサンプルが記載されている。

折角なので公式ドキュメントに記載のないRubyを使ってみたいと思っていたら、ruby-openai gemがあったので試す。

completion API

ChatGPT的なテキスト認識・応答を実行する場合はcompletion APIを使う。テキスト生成にはGPT-3ベースのtext-davinci-003というモデルを指定する。ドキュメントによればこれは現時点で最も有能なモデルとのことだが後述する従量課金モデルにおける単価も高い。求める速度や学習データや金額を加味して好きなモデルを選べば良い。

# ai.rb
require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'
  gem 'ruby-openai'
end

client = OpenAI::Client.new(access_token: ENV['API_TOKEN'])

# 指定できるパラメーターは以下を参照
# https://platform.openai.com/docs/api-reference/completions/create
response = client.completions(
 parameters: {
   model: "text-davinci-003",
   prompt: 'RubyでOpenAIのAPIを呼び出す方法は?',
   max_tokens: 2000
  }
)

puts response
$ API_KEY=<YOUR KEY> ruby ai.rb

実行すると以下のようなレスポンスが返る。

{"id"=>"cmpl-6iZDl05LwFazAWZVfxC499epDUbKS",
 "object"=>"text_completion",
 "created"=>1676079841,
 "model"=>"text-davinci-003",
 "choices"=>
  [{"text"=>
     "\n\nOpenAIのAPIを呼び出すためにRubyでは、OpenAIのRubyクライアントを使用する方法がおすすめです。OpenAI Ruby クライアントは、OpenAIのAPIへのアクセスを簡単に行うためのライブラリです。\nOpenAI Ruby クライアントを使用するには、まずGemのインストールを行います。以下のコマンドを実行します。\n\n```\n$ gem install openai\n```\n\n次に、APIを使用するための定義を行います。クライアントのインスタンスを作成し、利用するAPIのキーや署名を設定します。\n\n```ruby\nrequire 'openai'\n\nopenai = OpenAI::Client.new(\n  api_key: 'あなたのAPIキー',\n  app_signature: 'あなたのアプリ署名'\n)\n```\n\nAPIを実際に使用するときは、各APIのエンドポイントとパラメータを使ってopenaiオブジェクトのメソッドを実行します。例えば、OpenAI GymのAPIを使用する場合は、以下のようにオプションのパラメータとともにAPIを使うことができます。\n\n```ruby\nresource = openai.gym.create_environment(\n  environment_id: 'my_env',\n  parameters: {'n_actions': 4}\n)\n```",
    "index"=>0,
    "logprobs"=>nil,
    "finish_reason"=>"stop"}],
 "usage"=>{"prompt_tokens"=>21, "completion_tokens"=>473, "total_tokens"=>494}}

なお、使用制限を超えたとのエラーが出ることがある。

 {"error"=>
   {"message"=>
     "You exceeded your current quota, please check your plan and billing details.",
    "type"=>"insufficient_quota",
    "param"=>nil,
    "code"=>nil}}

自分の場合、どうやら過去に登録したときの無料枠をすでに使い切っていたらしく、 https://platform.openai.com/account/billing/overview からクレジットカードを登録して再度試したらうまくいった。

料金について

https://openai.com/api/pricing/ を一通り読むと良い。最新の情報は必ず公式ドキュメントを参照すること。

従量課金モデルとなっており、画像は生成枚数、自然言語処理においてはtokenの量に比例する。tokenとは「自然言語処理に使われる単語の断片」とのこと。

英文では1 tokenは約4文字、0.75ワードに相当すると説明されている。使いたい/生成したいテキストの具体的なtoken数を知りたければInteractive tokenizerで確認できる。

確かみてみろ!

使いすぎが怖い場合は自身が許容できる課金額の上限を https://platform.openai.com/account/billing/limits で制限しておくとよい。ハードリミット(API利用停止)とソフトリミット(メール通知)を設定できる。

弱気の$10.00上限

また、APIコール時にmax_tokensを指定しておけば一回のリクエストで爆発的にtokenを消費することを防げる。


2023-02-11時点で$0.0200 /  1,000 tokens。

上記のスクリプトで消費したのが約500 tokensなので、10,000回呼び出せば$100ぐらいになる。用途にもよるがサービスに組み込むレベルだとかなり高額になりそう。

*1:正確にはChatGPTではなく類似する別のGPT-3のモデル(Davinci等)を利用することになる

クラフトコーラを作る

先日に伊良コーラに出会ってからクラフトコーラのことが好きになった。ドクターペッパールートビアみたいな薬膳くささがたまらない。

原液を切らして飢えていたところ手軽に自作できるらしいことがわかったので 、以下の記事を参考に作ってみた。

mi-journey.jp

材料を集める

まず材料を集める。

...のだが、近所のマルエツやまいばすけっとにブラックペッパーやジンジャーパウダーはあれど、クローブやカルダモンなどのスパイスの原形が売っていない(ホールと呼ばれるやつ)。

SainEのような自分の生活グレードより上位のスーパーを活用してなんとか全て揃える事ができた。

S&BやGABANシリーズはいずれも100~300円ぐらいでお手頃なのだが、"スパイスの女王"カルダモンだけ廉価な小瓶が見つからず高かった(800円ぐらい)。

入手したスパイスたちを高貴な皿に盛り付けてみると...

百万倍も美しい!

作る

スライスしたレモンと、スパイスをフライパンに広げる。

シナモンスティックは"素手"で折る。カルダモンは"爪"で割る...とレシピに書いてあったが自分の爪では太刀打ちできなかったので包丁で対処した。

大量の砂糖と水を加えて煮る。ちなみに家にあったきび砂糖を使用したせいかやや茶色がかっている。

この煮込み工程時にスパイスたちが放つ香りが凄まじい。五感のうち嗅覚だけでだいぶ"キマ"ってしまった。夜分に近所には申し訳ないことをした。

沸騰してから弱火で10分ちょっと煮る。特に完成のシグナルはなかった。

切り上げてタッパーにうつして冷ます。

このとき23時頃だったので熱が取れた後のタッパーを冷蔵庫に突っ込み、そのまま朝を迎える。

~TRUE END~

飲む

完成した原液を炭酸水で割る。強気に原液:炭酸水=1:5程度でいく。

折角なので良い感じに撮ったりしちゃう。

記念写真

見た目にもだいぶ満足しつつ肝心の味も、うまい。マジで美味い

飲食店で"自家製コーラ"とか注文すると出てくるやつをかなり再現してる。これが"IKEA効果"か...!?

完成から数日、とにかく美味いので毎日3~5杯ぐらい飲んでいるがまだ半分程度ある。20~30杯ぶんぐらいありそうでお得感もある。

感想

素人でも合格点を簡単に叩き出せる類のやつでとてもよかった。

味もさることながら制作過程に中毒性があるとわかったのでリピ確定です。

フットレスト導入した

ここ数ヶ月は終業後に下半身からくる怠さを感じるようになっていて、どうやらデスクで座っていると太もも裏が圧迫されて血流が悪くなっているらしかった。終業後にランニングや懸垂をするルーティンだったのだが、この怠さがあると足が重くてどうにも出かける気になれない。

昇降式デスクでたまに立ちあがると少しは楽になるのだがずっと立っているわけにもいかず、座っている間はダメージが蓄積するデバフがある。これは着席中のダメージを減らさないといけないと思いフットレストを導入した。

選定基準

特にこだわりもないのでネットで検索して決めたが、比較検討する中でいくつか思うところはあった。

  • デスクチェア側で調整できるので段階調整はいらない
  • たまに裸足でも使うことがあるので金属とかの冷たい素材はNG
  • カバーを外して洗濯したい

感想

導入してから2週間ほど経過した。振り返ればここ1週間は終業後に運動をする気力が残っていたので、本来の目的であった血流改善にはなんらかの効果があったような気がしてきた。

ちなみにどのあたりが人間工学デザインなのかはよくわかっていない、低反発枕みたいな感じで踏み心地が良いあたりかもしれない。裏返した状態で足首を動かすのも悪くない。

裏返ったフットレスト

ただの台なのでもっと安くてもいいのでは...という気持ちは正直あるが、血流問題だけでなく、深く座って背筋を伸ばす正しい姿勢を維持しやすくなったこともある。おかげで腰痛や肩こりも最近は軽減されているように思い始めたので、良い買い物だったと信じていく。

『ビジネスも人生もグロースさせる コミュニティマーケティング』を読みつつEM Meetup運営を振り返る

ruby-jpで紹介されていて気になったので読んでみた。本の著者はAWSのコミュニティマーケティングを長年手掛けており、JAWS-UGという馴染みあるコミュニティの実例が数多く紹介されていそうだったのも本を手にとったきっかけでもある。

BtoCサービスを運営する企業で働いているのでマーケティングをかじっても損はないだろうという気持ちで読み始めたが、ミートアップを主催していた者としてはコミュニティ運営者目線で共感できる箇所が多かった。

タイトルの「ビジネスも人生もグロースさせる」がなんだか鼻につくので無いほうが硬派で好きだし紹介しやすいのにと思ったりもするが、新書のマーケティング的には仕方ないのかもしれない。

コミュニティマーケティングとは

まったく知らなかったので改めて整理すると...

製品のファンと呼べる人たちをコミュニティ化することによって、新たな顧客を獲得していくというマーケティング戦略のこと。「コミュニティに売る」のではなく「コミュニティを通じて売る」のが基本。

この文脈においてコミュニティは集まった人が情報を発信・拡散するコンテンツ生成装置(Contents Generator)となる。集まることが目的ではない。

マーケティングでもっとも難しいのは製品を「自分ゴト化」させるところ。マスマーケティングやマス広告はターゲットにリーチできるが、自分に関係があると思ってもらえるかどうかはクリエイティブ次第。一方、コミュニティマーケティングではコミュニティが製品について「自分ゴト化」できる目線で発信・拡散する。この活動がチャーンレート(解約率)を下げ、LTV(ライフタイムバリュー=顧客生涯価値)を上げていく。

インフルエンサーマーケティングとの最大の違いは、強いメッセージが育つ仕組みと持続性があること。影響力のある人なら一時的には効果はあるが自分ゴト化するメッセージを長く発信してくれるわけではない。

身の回りの実例

JAWS-UGでのコミュニティマーケティングAWSからできたわけではない、他の会社や事業にも再現性がある、というのは本書中でも強調されている。

これまで意識してこなかったが、確かにコミュニティマーケティングの実例は身近でもいくつか挙げられる。どれも成功事例かどうかわからないが。

GitHub CommunityCircleCI DiscussMonzo Communityのような完全オンラインのコミュニティ。オフラインではminneハンドメイドマーケットとか、スタディサプリ合格祝賀会のような自分にとって身近なものが思い浮かんだ。

気になったポイント

完全オンラインでのコミュニティ形成は成立するか

優れたコミュニティは、「わかっている人が、わかりたがっている人に話をしている構図」 なのだということでした。説明してもムダな人には、時間をかけないのです。だから効率がいい。わかりたい人に、わかっている人が説明する場こそ、つくるべきコミュニティ

ここで語られているような優れたコミュニティになるには、本書にあるようにオフラインでの繋がりが一定重要に思う。

オンラインだったから、と一概に言えるものでもないが... 2021年に終了した某フリマアプリのコミュニティサービスは運営にだいぶ苦慮したようで、サービス終了後も5chのスレなどから当時の様子が伺えた。匿名のオンラインでスタートし、先鋭化・過激化してしまったコミュニティを軌道修正する術はあるのだろうか。

フィードバックのうまい扱い

フィードバックを聞きたくない、という人や会社にある大きなバイアスの一つは、「聞いてしまったらすぐに対応しなければいけない」という思い込み です。しかし、実際は「今すぐできない理由」をきちんとコミュニケーションすればいいのです。

このコミュニケーションが通じるのは信頼関係が前提であり、そこが破綻しているといかに建設的な理由も聞かれないのでは、と思う。1対1では話せばわかることも1対多では通じない、ということもよくある。

顧客との信頼関係構築にあたってまず1つや2つぐらいはフィードバックを受け入れてしまおう、という避けがたい引力がありそうだ。

向いているビジネス

初速が必要なビジネスには、コミュニティマーケティングは向いていません。コミュニティマーケティングの「自分ゴト化」にはそれなりの時間がかかりますし、そこには「真実の声」がないといけないからです。 そして、聞いた人が本当にこれをいいと思わないと、次には伝えていかない。

この点以外にも色々適性はあると思う。

たとえば家電やハードウェアのように物理的な製品の場合はフィードバックを取り入れ改善するサイクルがソフトウェアに比べて長くなりがち。そのような製品だとコミュニティに話題を定期的に持ち込むのが難しくないか、とか。

他には映画やアトラクションのようなエンタメ系のサービスはどうだろう。体験直後は自分ゴト化できていても風化するので生活に根付くわけではない...と書いたがディズニーという圧倒的なレベルでできている例もあった。

日常的に長く使う x ないと困る x 高いアップデート頻度 ...あたりのサービス特性は適性が高そう。

コミュニティ運営全般に言えること、EM Meetup振り返り

僕はEngineering Manager Meetup(以下、EM Meetup)というコミュニティを2018~2020年のあいだ約2年ほど運営していた。connpassのグループ参加者は1,300人超で、野良コミュニティにしてはまあまあ多くの方に興味を持ってもらえたと思う。(過去形なのは、個人での運営を手放してコミュニティに引き継いだため)

EM Meetupは特定企業や製品のマーケティングとしてやっていたわけではないので本書の趣旨とはいくぶん異なるが、このコミュニティ運営において僕が意識したことや、振り返ってみて大事だったと思う点を同書にも見ることができた。とりわけ手探りで実践したことが良しとされているなど、数年越しに"答え合わせ"ができたのは嬉しかった。

初期のメンバーが大事

いいコミュニティは情報を発信していくことが自分自身のプラスになっていく、というメリットに最初から気づいている人たちが中心」とあったが、これはEM Meetupで強く実感したことだ。

初回の開催メンバーにも恵まれたおかげで開催前〜終了直後にTwitterで感想が拡散され、参加できなかった層に勝手にリーチしていき、すぐに第2回を企画しなければという"需要"と"手応え"を感じたことを覚えている。

togetter.com

情報発信がプラスだという風土をつくる

コツが「アウトプットファースト」です。クラウドはいいね、という人たちが集まってきて、そこだけで盛り上がっていても仕方がありません。 (中略) 声が外向きに出ないといけない。 「よかった」というツイートでもいいし、ブログでもいい。それらが外に伝わるように表現してもらう。そうでなければ、肝心の熱量が外向きになりません。

EM Meetupではプレゼン形式でもOSTでも感想・意見をtweetしてもらうようしつこくお願いし続けた。登壇者や参加者同士でオープンなフィードバックを送りあうことでよりコミュニティが活性化し、モチベーションを高く保つことが第一義だと思っていたが、このムーヴがコミュニティのマーケティングにも寄与していたようだ。

また、EM MeetupのSlackワークスペースを作り、ミートアップ以外の場でもアウトプットや交流をできるようにしたことで、その場限りではなくゆるく長くつながる"コミュニティ"になっていった、というのも肝要だったように思う。

運営に巻き込む

コミュニティ経験者は、新しいコミュニティにも進んで運営側にまわる人が多いのです。AWSのコミュニティでも、そういう人が多いですね。  そして、すぐに仲間を集めて負荷分散を図る。ひとりでやるより、複数人でやるほうがコミュニティの開催頻度も上げられ、テーマの幅も広く、深くすることができる。なにより、コミュニティの成長速度が速くなります。

ここは出来ていた面とそうでない面がある。

コミュニティは、リーダーだけを見つけても仕方がなく、 どうやったらフォロワーが集まるようになるか、が重要なのです。  ですから、コミュニティづくりをサポートするとき、極めて大切なのは、フォロワーの候補者を集めるために、コミュニティマネジャーやコミュニティマーケターが手助けをして、リーダーとフォロワーの関係性を最初からつくっていくことです。

EM Meetupでは初期から早々に運営を手伝ってくれる方々が現れ、非常に助かった。エンジニアリングマネジメントに関心のある人が集まっていることもあり、信じられないぐらいサポーティブでフォロワーシップの強い方々と動くことができたので一切の不満がなかった。個人的には慣れないイベント運営をたくさんサポートいただけたことで主催としてしっかりやっていこうというモチベーションにもつながった。

しかしながら、イベントの運営をずっとコミュニティに移譲せずにいたため効率的にイベントを供給できなかったという反省もある。個人の忙しさやモチベーションに依存して開催頻度が変動してしまい、「もっと頻繁にやってほしい」「次はいつですか」という声に応えられないこともあった。

マネジメントの成果はそうそう短期には出ないので、1~2ヶ月の間隔で開催しても自身が進歩や成長を感じられないままであったり、実践の機会がなく、抱える課題意識が変わらないままミートアップを重ねるとループしている気分になる。そういったタイミングでは自分抜きでコミュニティに開催してもらえばよかった。

コミュニティとの向き合い方

最後に、運営側ではなく個人としてのコミュニティとの向き合い方について。以下の内容には100%同意できる。

おすすめするのは、コミュニティに加わったら、 積極的にアウトプット(発信)側にまわること です。常に「ギブ」することを考える。そうすれば、自然にまわりに見つけてもらえるようになり、インプットや引き合いも増えていくからです。  たとえば、コミュニティに100回参加するよりも、1回の登壇が効果を発揮します。自らアウトプットすることが、より良質なインプットを得ることにつながっていく。登壇すれば、すでに自己紹介が終わった状態で懇親会やネットワーキングにも参加できるので、まわりの反応が得やすく、相当有利な状況にある (太字は当記事著者によるもの)

2018年に実践を通じてこのことを学んだ。

ohbarye.hatenablog.jp

いろんなところに顔を出すの面白いと思ってJS ConfやiOSDCなど専門外の領域で登壇したりもしたが、やはり「自分がオーナーシップを持てる」コミュニティや場に参加していくのがコミュニティにとっても自分にとっても最良の結果を得やすいし、持続しやすい(本書でいう「自分ゴト化」)。


本の感想文を書くつもりだったが過去の振り返りになってしまった。

記事冒頭でタイトルの「ビジネスも人生もグロースさせる」に文句を付けたりしたが、実際にコミュニティ活動が僕の人生やキャリアに大きく影響を及ぼしているし、まったく外しているわけでもないな、と思い直した。

ビジネスでのマーケティング実践についてはエアプなので何も言えることはないが、もしこれからコミュニティを形成したい人会社のブランディング・採用活動等に関わる人にとっても何がしか得るものがある本だと思う。

1Password CLIから指紋認証でパスワードやOTPを取得する

1Password CLIから指紋認証でパスワードやOTPを取得する方法について。

1Password CLIは使ったことがなく、Your CLI wish is our command 🪄💫 | 1Passwordを見て興味を持ち、セットアップしたらとても便利だった。

セットアップ手順

1. 1Passwordのセットアップ

まず https://1password.com/downloads/mac/ 1Password 8以上のデスクトップアプリをインストールする*1

2022-03-28時点でApp Storebrew install 1password では7系しかインストールできない。かつ、macOSの1Password 8はbeta扱いなので画面下のほうにある以下のリンクからダウンロードする。

インストールした1Passwordを起動してログインしておく。

2. 1Password CLIのセットアップ

https://developer.1password.com/docs/cli/get-started を参考にすればよい。一応手順を書く。

1Password CLI v2以上をインストールする。

https://1password.com/downloads/command-line/ からダウンロードしてもいいし、brew install 1password-cliしてもよい。brewでもv2をインストールできる。

インストールしたらCLIからアカウントを追加する。

$ op account add
Enter your sign-in address (example.1password.com):
Enter the email address for your account on <sign-in address>: 
Enter the Secret Key for <email address> on <sign-in address>:
Enter the password for <email address> at <sign-in address>:

Vaultにある 1Password Account (<username>) に書いてある内容を移せばOK。

項目 入力事項
sign-in address 個人アカウントなら大抵は my.1password.com でよいはず
email address (1Passwordアカウントのメールアドレス)
Secret Key (1PasswordアカウントのSecret Key)
password (1Passwordアカウントのパスワード)

次に、追加したアカウントにCLIsign inする。

$ eval $(op signin)
Enter the password for <email address> at <sign-in address>:

account addしてもアカウントを追加しただけでsign inはできていないため、このコマンドでsign inする必要がある。ちなみに1Passwordに設定した期間で強制sign outされる。

3. 指紋認証を有効化する

1Passwordのデスクトップアプリで以下の手順を行うことで、パスワード認証ではなく指紋認証sign inできる。

  1. 1Password > Preferences で設定モーダルを開く
  2. Developer > 1Password CLI 2 にある Biometric unlock for 1Password CLI にチェックを入れる

試しにOTP取得してみる

上記のセットアップが完了していれば以下のコマンドにて、1Passwordへの指紋認証を経て各種itemのパスワードやOTPなどを取得することができる。

$ op item get my-item --otp

このOTPをパイプで流し込んだり、aliasを登録しておくとCLIでの多要素認証の手数が減る*2Your CLI wish is our command 🪄💫 | 1Passwordにあるように環境変数を流し込むようなこともできる。

コマンドについて

op item get { <itemName> | <itemID> } --otp

1Passwordに登録されたitemの情報を取得するコマンド。

itemNameに空白等が入っていてCLIとかで扱いにくいな〜ってときにItemIDが使える。

itemIDは op item listop item get で確認できる。

$ op item list
ID                            TITLE          VAULT     EDITED
2nkisfqj3bh2tb6soowptfkooa    my-item        Personal  3 years ago

--otp でOTP文字列を返す。OTP以外のフィールドも取り出し放題で、他にも様々なオプションがあるのでリファレンス参照。

関連ドキュメント

*1:当初、1Password 7で色々ためそうとして失敗した

*2:減ってよいのかどうか?は別議論

個人サイトのビルドツールをwebpackからViteに移行した

個人サイト https://ohbarye.github.io/ のビルドツールをwebpackからViteに移行した。

まぁ、移行と大げさに言っても、元々vanilla JSとSassでちょっと動きと装飾を付けただけのペライチページなのだけど。

f:id:ohbarye:20220323235841p:plain

実質ただのリンク集

理由

State of JS 2021のビルドツール部門でViteが1位になっていたが利用したことがなく気になっていたため。手元にある最小のフロントエンドプロジェクトが個人サイトだったのでplaygroundとして試してみた。

f:id:ohbarye:20220324000002p:plain

https://2021.stateofjs.com/en-US/libraries/build-tools より

Viteとは

Vite公式を斜め読みした。ランキング中だと経験あるビルドツールがwebpack, Parcel, Rollupあたりで止まっていたのでそこからの差分で理解すると...

  • esbuildというGo製の爆速ビルドツールが生まれた
  • でもまだproduction向けにbundleする機能は安定しておらず、webpackとかRollupのほうが成熟してる
  • Viteはesbuildを開発用に使い、production向けのbundleにはRollupを使う
    • esbuildを使ってdependenciesをpre-bundleしたり、HMR提供して開発体験を最高にする
  • 2つのツールの併用になるが、Viteはconfig周りの複雑さを吸収してデフォルトだとzero configで動く

という感じか。

移行手順

プロジェクトの外側でyarn create viteを試してみてどんなファイルが生成されるかを一通り眺める。vanilla JSとTypeScriptを選んだ場合は数ファイル程度だったのですぐに理解できた。

生成されたファイルやpackage.json内のnpm scriptやdependenciesを元々のプロジェクトにコピペする。

index.htmlがあるディレクトリをrootとし、相対パスで指定したファイルが依存ツリーに勝手に追加されていく。yarn devで起動し、おかしいところがあれば直す。今回はsassのインストールと、相対パスの置換ミスぐらい。

github.com

感想

2つのツールをラップしてると聞くと「結局開発者が両方知らないといけないやつでは...?」身構えてしまう。

ただ、https://ohbarye.github.io/のようにちょろっとTypeScriptやSassでサイト作りたい程度であればconfig知識ほぼ不要でセットアップできたし、このあたりはParcelの初出の頃を思い出した。

一部ビルドに工夫*1が必要なところも、Viteのconfigからrollupにオプションを渡すぐらいのことは問題なくできた。configオブジェクトに型が付いているのはとても良い。mis configurationを避けられる。

開発時のビルド速度の向上はやはりある程度以上の規模がないと恩恵がわからないので、業務のアプリケーションでもそのうち試してみたい。

*1:GitHub Pagesのためにassetsのパスを変える程度