Small Changes

週刊ニュース Lv10(2023年1月21日~2023年1月27日)


Metadata


昨日は出かけていたため週刊ニュースを書くことができませんでした。

最近は急に冷えてきて、キーボードも冷えていて指が冷たいですが頑張って書いていきます。

1月21日(土)

makeで@マークでメンションできるようにする

StripeのSetupIntents API+Payment Elementを使って決済情報を収集する

  • 参考:https://stripe.com/docs/payments/save-and-reuse

  • StripeのSetupIntents APIは事前に決済情報のみを収集したいというようなユースケースのときに便利です。

  • SetupIntentを作成する際に引数にcustomerを渡しておくと、セットアップが成功すると引数のcustomerに紐づいてくれます。下記のようにすることでセットアップに成功すると、指定したcustomerに紐づくSetupIntentが作れます。

    • create_setup_intent_params = {
        customer: stripe_customer_id,
        payment_method_types: ['card']
      }
      setup_intent = Stripe::SetupIntent.create(create_setup_intent_params)

  • SetupIntentには、client secretが含まれており、クライアント側からSetupIntentのクライアント情報にアクセスするにはclient secretが必要なため、client secretを返却してあげます。

    • { client_secret: setup_intent.client_secret }

  • 今回フロント側はReactのため、必要なライブラリをインストールしておきます。

  • 決済情報を入力するためのフォームを表示するには、StripeのPayment Elementコンポーネントを使う必要があります。Payment Elementコンポーネントを使うためにはStripeのElementsコンポーネントが必要です。

  • StripeのElementsコンポーネントには、先程サーバーから返却したclient_secretが必要でした。

  • このサーバーとフロントの連携部分を理解するのに時間を要しました。。

1月22日(日)

React Routerのナビゲーションを型安全にする

  • 参考: https://tech.mobilefactory.jp/entry/2022/12/01/000000

  • この記事を見ながら、ナビゲーションで直接文字列を指定している箇所を型安全にできないか挑戦してみましたが、使いやすい型を自動生成する部分の参考記事のコードが理解できないため、自分がわかる形で実装をしてみたもののうまくいきませんでした…また時間があるときにチャレンジしてみたいです。

1月23日(月)

Go言語のカンマ ok イディオム

  • 初めてのGo言語の10章からは1~9章の内容をしっかり理解していないと読み進めるのが難しかったため、1~9章を2週目進めています。

  • 3.4.2では、マップの場合のカンマ ok イディオムについて書かれていました。

  • マップはRubyでいうハッシュのようなkeyとvalueの組み合わせです。

  • 例えば、マップの場合は「ゼロ値と結びつけられているキー」と「マップに存在しないキー」を区別するときに使うようです。

    • lunchMenu[4]については、マップに存在しないキーのため、falseが返ってきています。

    • var lunchMenu = map[int]string{
          1: "Aランチ",
          2: "Bランチ",
          3: "Cランチ",
      }
      v1, ok1 := lunchMenu[1] // Aランチ true
      v2, ok2 := lunchMenu[2] // Bランチ true
      v3, ok3 := lunchMenu[3] // Cランチ true
      v4, ok4 := lunchMenu[4] //  false

Ebiten触ろうと思ったらエラーが出た

  • Ebitenではgo-glを使っているようなのですが、それ関連で出たエラーっぽかったです。自分の作業環境はWSL上のDockerコンテナに構築しているため、その中で動かそうとすると作業環境にgo-glを動かすために色々インストールする必要がありそうだったので、自分の場合はEbiten触る用のコンテナを作ったほうがよさそうです…

1月24日(火)

Goが難しい理由がなんとなくわかった

  • Railsのレールに乗りながらRubyを覚えていった口だったので、Rubyについては気になったタイミングでトップダウン的な感じで覚えていくことができました。

  • ただ、Goはフレームワークを使って覚えようとしているわけではなく、Go言語単体でボトムアップ的な感じで学んでいるためレールもなく、〇〇をしたいと思ったときは、その実装のスタンダード的なことを調べてパーツを作っていく必要があるため、難易度があがるのかなと思いました。

  • そういう意味では、Railsのレールというのはやりたいことを素早く実現しつつ、必要なタイミングでレールを降りてRubyやさらにその下のレイヤーなりを調べていくことができたので第1言語としては良かったのだろうなと思いました。

小学生漢字問題を解消できないか調べた

1月25日(水)

特になし

1月26日(木)

Ruby3.2のバージョンアップ後yamlのパースがうまくいかない

  • なぜかRuby3.2 x Rails7(6)系のtest環境のときだけyamlのパース結果が変わるということがあります。。

  • Rails7(6)系のtest環境のときだけ結果が変わるのでRailsの設定の影響を受けていそうですが、原因がきりわけられませんでした。。本当に謎です。。

1月27日(金)

エクセルの実態はXML

  • エクセルはunzipすることができるのですが、worksheetの実態はXMLということを教えてもらいました。CSVもカンマ区切りのただの文字列だったことを知ったときと同じくらいの衝撃でした。

References