Stripe CLIでWebhookをローカルに転送 

  4. Stripe CLIでWebhookをローカルに転送 具体的に手順を教えて                                               
● WSL2(Linux)環境なので、以下の手順で進めます。                                                
  
  1. Stripe CLIのインストール                                                                                                                                                                     
  # GPGキーを追加                                                                                
  curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public | gpg --dearmor
  | sudo tee /usr/share/keyrings/stripe.gpg                                                         
  # リポジトリを追加                                                                             
  echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] 
  https://packages.stripe.dev/stripe-cli-debian-local stable main" | sudo tee                      /etc/apt/sources.list.d/stripe.list
                                                                                                 
  # インストール
  sudo apt update && sudo apt install stripe

  2. ログイン

  stripe login

  ブラウザが開くので、Stripeアカウントで認証します。WSL2でブラウザが開かない場合は、表示されるURL  をWindowsのブラウザにコピペしてください。
                                                                                                 
  3. Webhookをローカルに転送

  stripe listen --forward-to http://localhost:8000/stripe/webhook
                                                                                                   実行すると以下のような出力が出ます:
  > Ready! Your webhook signing secret is whsec_xxxxxxxxxxxxx (^C to quit)                       
                                                                          
  この whsec_... を .env の STRIPE_WEBHOOK_SECRET に設定してください。                           
                                                                                                   4. 確認                                                                                        
                                                                                                   stripe listen を起動したまま別のターミナルで composer run dev                                    を実行し、Checkoutを行うと、ターミナルに受信したイベントが表示されます:
                                                                                                 
  2026-04-08 10:00:00  --> checkout.session.completed [evt_xxx]
  2026-04-08 10:00:00  <-- [200] POST http://localhost:8000/stripe/webhook                       
                                                                                                   stripe listen はCheckout検証中はずっと起動しておいてください。止めるときは Ctrl+C です。   

画像まで text 判定されてしまう

.gitattributes画像はテキスト変換しない と明示

 

* text=auto eol=lf

*.blade.php diff=html
*.css diff=css
*.html diff=html
*.md diff=markdown
*.php diff=php

*.png -text
*.jpg -text
*.jpeg -text
*.gif -text
*.ico -text
*.webp -text
*.svg -text

CHANGELOG.md export-ignore
README.md export-ignore

 

 

サーバの壊れた画像を戻す
git pull
git checkout -- public/*.png public/*.ico public/images/*.png
git status

改行コード変換がバイナリ(画像)にまで影響して壊れる問題

これは Windows(Sourcetree)↔ Linux(Xserver) の組み合わせで起きやすい「改行コード変換がバイナリ(画像)にまで影響して壊れる」問題を潰す設定です。
※あなたのログに “Fix binary line ending conversion for images” が出てたので、まさにココが原因になりやすいです。


やること(結論)

  1. .gitattributes を入れて「画像は絶対に改行変換しない」

  2. autocrlf を正しく設定(Windows / Linuxで分ける)

これで画像が壊れなくなります。


1) .gitattributes を追加(最重要)

リポジトリ直下に .gitattributes を作って、これをそのまま貼ってください。

 
# デフォルト:テキストは自動判定 + LFで統一
* text=auto eol=lf

# 画像・バイナリは絶対に改行変換しない(壊れるのを防ぐ)
*.png -text
*.jpg -text
*.jpeg -text
*.gif -text
*.webp -text
*.ico -text
*.svg -text
*.pdf -text
*.zip -text
 

作ったらローカルで:

 
git add .gitattributes
git commit -m "Add .gitattributes to protect binaries"
git push
 

2) autocrlf 設定(Windowsとサーバーで分ける)

✅ Windows(SourcetreeのPC)側

これを実行(PowerShell / Git Bash どっちでもOK):

 
git config --global core.autocrlf false
git config --global core.safecrlf true
 

.gitattributes があるので autocrlfはfalse推奨(勝手に変換させない)


✅ Xserver(Linux)側

サーバーでは基本これでOK:

 
git config --global core.autocrlf input
 

(サーバーで false でも大抵OKですが、input が無難です)


3) すでに壊れた/変換されたファイルを「一度正規化」する(重要)

.gitattributes を入れた後、ローカルでこれを1回だけ実行:

 
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings with .gitattributes"
git push
 

そのあとサーバーで:

 
git fetch origin
git reset --hard origin/master
 

これで 全ファイルがルール通りに揃って、以後壊れません。


確認コマンド(サクッと)

ローカル/サーバーで確認:

 
git config --show-origin --get core.autocrlf
 

もし「Windows側のターミナルでコマンド打つのが面倒」なら、あなたの状況(Sourcetree使用)に合わせて、Sourcetreeの設定画面で確認する場所も案内します。どっちで進めたい?(コマンドでOKならこのまま上の手順で完了です)

 
 

plusenglish重要事項

#「日本人は英語が話せない」を終わりにする。

なぜ、9年間も英語を学んだのに話せないのか。
それは、自分の言葉で学んでいないからです。
他人の例文を覚えても、話せるようにはなりません。
英語は知識ではなく、自分の表現だからです。
+englishは、その本質に正面から向き合ったアプリです。


# なぜ、+englishでのみ英語が身につくのか

理由1.自分の言葉で覚える(翻訳機能、音声確認機能)

英語が口から出ないのは、覚えている文が「自分の文」ではないからです。
+englishでは、あなたが言いたい日本語をそのまま入力します。
AIが自然な英語に翻訳し、正しい音声で確認できます。

例文を作るのが大変?そんなことはないです。
今日あなたがLINEで送ったメッセージを見返しみてください。
LINEは、あなたが覚えるべき英語の宝庫です。
そこから選んでコピペしてください。

自分が使う言葉だから、脳が「自分ごと」になる。
自分の感情と結びつくから、定着する。
だから実際の会話で自然に出てくるのです。
英語習得で一番効くのは、「自分が言いたい文」を覚えることです。


理由2.効率よく覚える(目隠し機能、並べ替え機能、自動復習機能)

覚える内容があっても、効率よく覚えなければ苦痛となります。
+englishは、生成した英文はワンタップで目隠しできます。
見ないで言う練習を繰り返すことで、本当の記憶になります。しかし、最初から全て隠してしまうとなかなかハードルが高いです。そこで、その下にヒントを置きました。そこで使われる単語を3語ずつバラバラにならべています。最初はこちらを見て覚えてみてください。
そして、忘却曲線に基づく自動復習機能。1日後、3日後、7日後、14日後。忘れる前に思い出させる機能が搭載されています。
努力や根性に頼らない。仕組みで覚える。だから効率が違います。

理由3.継続して覚える(学習進捗機能)
英語習得は短期戦ではありません。続けられるかどうかがすべてです。ここが最大の難関なのです。
日常会話はパターンの積み重ねです。
2,000〜3,000文を覚えれば、大部分はカバーできます。
+englishは、1年間で2,000文習得という明確な目標を掲げました。

学習進捗は可視化されます。
自分がどれだけ積み上げたかが一目で分かる。
積み上げが見えるから、やめたくなくなる。

そして2,000文達成時には修了証を発行。

ゴールがある。
進捗が見える。
だから続く。


# 最後に

英語は、可愛い演出では身につきません。
英語そのものを楽しめるようになったとき、初めて本当に続きます。

そしてその楽しさは、
自分の言葉が英語で言えた瞬間に生まれます。

他の栄会はアプリは可愛いキャラクターなどでモチベーションを上げようとしています。
しかし、それは英語そのものを楽しむというものではないのでと続かない。覚えられない。力をつけられない。

+englishは違います。あなたの言葉を、あなたの力に変えます。
話せるアプリは作りました。
1年後、話せないままでいるか。
話せる自分になるか。

決めるのは、あなたです。

Gemini CLI 安定インストール手順(WSL版)

① PowerShellでWSLに入る

 
wsl
 

画面がこうなればOK

 
takuya@PC:~$
 

② Node.js を入れる(重要)

古い Node が入ると Gemini が動きません。

 
sudo apt update
sudo apt remove -y nodejs npm
 

次に Node 20 以上を入れる

 
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
 

確認

 
node -v
npm -v
 

 
v20.x.x
10.x.x
 

③ Gemini CLI をインストール

 
sudo npm install -g @google/gemini-cli
 

④ 動作確認

⚠️ WSLでは gemini -v が固まることがある

代わりに

 
node /usr/lib/node_modules/@google/gemini-cli/dist/index.js --version
 

 
0.31.0
 

出ればOK。


⑤ WSLで固まる問題の対策(重要)

alias を作る

 
echo 'alias gemini="node /usr/lib/node_modules/@google/gemini-cli/dist/index.js"' >> ~/.bashrc
source ~/.bashrc
 

⑥ 確認

 
gemini --version
 

 
0.31.0
 

⑦ 初回ログイン

 
gemini
 

ブラウザが開く

Login with Google


⑧ 終了

 
/quit
 

Laravel開発でのおすすめ環境

 
Windows

WSL (Ubuntu)

Node

Gemini CLI
 

プロジェクト

 
Sail
bun
vite
npm
 

とは 分離する。


プロジェクトの置き場所(重要)

できればここ

 
/home/takuya/projects
 

 
mkdir ~/projects
cd ~/projects
 

理由

  • node_modules 壊れにくい

  • vite 高速

  • Docker 安定


よくあるトラブル

gemini 固まる

対策

 
alias gemini=...
 

permission denied

 
sudo npm install -g
 

node version エラー

 
node -v
 

確認


一番大事なポイント

Gemini CLI は

プロジェクトに入れない

OSツールとして使う。


最短まとめ(これだけ覚えればOK)

 
wsl

sudo apt update
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

sudo npm install -g @google/gemini-cli

echo 'alias gemini="node /usr/lib/node_modules/@google/gemini-cli/dist/index.js"' >> ~/.bashrc
source ~/.bashrc

gemini

stripe設定

  1. 月額課金用の「価格(Price)」を作成する       
  現在のプログラムで使用しているPrice
  ID(price_...)が「一括払い」用の場合、サブスクリ
  プション(mode =>
  'subscription')ではエラーになります。


   1. Stripeダッシュボードの「商品」メニューから、 
      新しい商品を作成(または既存の商品を選択)し 
      ます。
   2. 「価格」の設定で、「継続」(月次など)を選択 
      して保存します。
   3. 発行された新しい Price ID(例:
      price_1QXXXXXXXXXXXX)を、app/Http/Controller
      s/StripeController.php の 'price'
      の部分に貼り付けてください。

  2. Webhook(ウェブフック)の設定をする
  支払いの成功や解約をシステムに通知するために、Str
  ipe側に通知先URLを登録する必要があります。       


   1. ダッシュボードの「開発者」>「Webhook」を開き
      ます。
   2. 「エンドポイントを追加」をクリックします。   
   3. エンドポイントURL:
      https://english.p-books.xyz/stripe/webhook   
      を入力します。
   4. 送信するイベント:
      以下の3つを必ず選択してください。
       * checkout.session.completed
         (最初の支払い完了時)
       * invoice.payment_failed
         (月額更新の支払い失敗時)
       * customer.subscription.deleted (解約時)  
   5. 「エンドポイントを追加」ボタンを押して完了で 
      す。


  3. APIキーの確認(必要に応じて)
  もしテスト環境から本番環境へ切り替える場合は、.en
  v ファイルの STRIPE_KEY と STRIPE_SECRET
  が本番用のもの(pk_live_... と
  sk_live_...)になっているか確認してください。

 

テスト環境の場合】

 

   1 APP_URL=http://localhost
     (または開発サーバーのURL)
   2 STRIPE_PUBLIC=pk_test_...
   3 STRIPE_SECRET=sk_test_...
   4 STRIPE_PRICE_ID=price_...
     (テストモードで作った月額商品のPrice ID)      

  【本番環境の場合】


   1 APP_URL=https://english.p-books.xyz
   2 STRIPE_PUBLIC=pk_live_...
   3 STRIPE_SECRET=sk_live_...
   4 STRIPE_PRICE_ID=price_...
     (本番モードで作った月額商品のPrice ID)   

 

どのように紐づけされるか

 1. [あなたのサイト] → (Price IDを送る) → [Stripeの決済画面]
       * ここで「どの商品(Price ID)を売るか」をStripeに伝えます。
   2. [Stripeの決済画面] → (ユーザーがカード入力) → [Stripeの管理システム]        
       * Stripeの中で「決済が成功した!」という事実が発生します。
   3. [Stripeの管理システム] → (Webhook URLを探す) →
      [あなたのサイトのWebhook受取口]
       * Stripeは、あなたが管理画面で設定した「Webhook
         URL」を見て、「このサイトの決済が成功したから、ここに通知を送ってあげよう
         」と自動で判断します。