AIに自然言語だけでNext.jsでmacOSクローン電卓を作ってみた

じゃんくはっく
じゃんくはっく

結論:2024年10月現在でプログラミングのワークフローは変わりつつある!これを知らないのと、知ってるのとでは大違いということがわかりました。

この記事の概要

  • VScode経由で、AIにお願いして自然言語(日本語)で電卓を作った
  • 作ったのはNext.jsで動作するWEBアプリ
  • その作り方の具体例
  • シーケンス図やフローチャートや仕様書なども良いものを作ってくれます

AIにお願いして作ったもの

 何を作ったのかというと、それはmacOSの付属する電卓アプリのカラーリングに似たWEBアプリの電卓です。僕自身がほぼ知らないNext.jsのフレームワークを使ってAIに作ってもらうことを目標にしたプロジェクトです。AIが作ったソースコードは以下にあります。

macOS clone2 電卓アプリ

また、GITHUBにあるreadme.md の仕様書もAIに作ってもらいました。びっくりしたのは、シーケンス図やフローチャートなんか書けないだろうな!って思っていたのですが、依頼したら作ってくれました。GITHUBにある図はまったく、加工していません。びっくりですよね!シーケンス図をこちらにも載せておきます。

sequenceDiagram
    participant User as ユーザー
    participant CalculatorApp as 電卓アプリ
    participant Display as 表示部
    participant Clipboard as クリップボード

    User->>CalculatorApp: ボタンまたはキーボードで入力
    CalculatorApp->>Display: 入力値を更新
    Note right of Display: displayValueを更新

    User->>CalculatorApp: "="キーを押下
    CalculatorApp->>CalculatorApp: 計算式を組み立て
    CalculatorApp->>CalculatorApp: evaluateExpression関数を呼び出し
    CalculatorApp-->>Display: 計算結果を表示
    CalculatorApp->>CalculatorApp: 履歴を更新

    User->>CalculatorApp: "COPY"ボタンを押下
    CalculatorApp->>Clipboard: 計算結果をコピー

    User->>CalculatorApp: 外部から数字をペースト
    Clipboard-->>CalculatorApp: 数字を貼り付け
    CalculatorApp->>Display: displayValueを更新

作り方・概要

さて、ではどういうものを用意すれば良いのでしょうか? それは簡単で以下を用意すれば良いです。

  • OpenAIなどAIサービスプロバイダのAPI KEY
  • VScode
  • そのプラグインのCLINE:LINK

これだけです。

作り方

いきなり作り始めても良いのですが、完成度を求める場合は、仕様書を作ることをお勧めいたします。たとえば、gitのREADME.mdと、macosの電卓のスクショだけLocalの適当なディレクトリにコピーして、そのディレクトリをVScodeで開きます。

そして、CLINEで以下のようにお願いするだけです。

README.md の仕様を元にNext.js で電卓を作ってください。添付画像、ss.png も参考にして。

画像は、カメラアイコンから添付できます。すると、npx create-next-app@latest calculator-appなど必要なコマンドなどを、Run Commandするだけです。画像は1つ進んだ状態です。たとえば、エラーなどが起きてもそれを再度、AIが判断し解決策をコマンドなりを教えてくれます。やばいですよね!

そして、以下のスクショではpage.tsxをAIが書いてくれて人間はSaveボタンを押すだけです。ふぁー! この時点で僕はぶっ倒れそうになりました。

実際に作り込んでいく過程では、指示の仕方が重要です。

作るときのコツ

やってみるとわかりますが、指示の与え方、つまりお願いの仕方がポイントです。 時には、無限ループっぽくなるときもあります。そういう時は、ソースコードを全部1枚のテキスト上にして、WEB版のChatGPTのo1に解決してもらいます。そして、その指示や、修正ソースコードをCLINEで投げることにより、ほぼ全て解決できました。 CLINEでo1に投げると、コンテンツが長いって怒られますのでWEB版を使いました。

また、UIを作る時は、v0 の方がより良いUIデザインを作ってくれます。あと、実際の開発フローのようにGITで管理して、ISSUEを作りフューチャーブランチを切りながら、進めるとよりどこに問題があって、どういうコードが書かれて、AIがどこで間違っているのかの原因を探る時に効果的です。

AIプロバイダについて

CLINEで指定できるプロバイダは、いろいろあります。ChatGPTのo1はAPI経由では使えないようなので、mistral.aiのCodestralというのがあります。これを使いたい時は、APIキーを発行して、CLINEのOpenAI Compatible で使えるかなと試したのですが、うまくいきませんでした。以下を入れてプロキシー経由で使えば回避できるみたいでした。

pip3 install litellm
pip3 install 'litellm[proxy]'
export MISTRAL_API_KEY=取得したAPIキーを
export CODESTRAL_API_KEY=これのAPIキーは別のようです。取得したAPIキーを
litellm --model mistral/mistral-large-latest

CLINE側には以下のように設定します。

無料版だと、レート制限が低かったり、データが非公開じゃなかったり、カスタムモデルが使えなかったりと制限がありますので、よさそうであれば有料プランも考えています。

まとめ

今回なんとなくわかったこと

  • VScodeから、CLINEプラグインを経由しAPI経由で使う
  • 仕様書は必ず書くべき。面倒な時はあとから、ソースコードのロジックを追って書いておく
  • 要求仕様は、平たく言えばアジャイル開発するときの、ユーザー目線のやれることを文章化することが大切
  • システムプロンプトにも、絶対守ってほしいルールは書いておくと良い
  • AIにお願いするときは、具体的にお願いする
  • CLINEのAIにお願いするとき、お願いの仕方をより頭の良いAIであるo1に依頼する
  • 実際の開発のワークフローと同じようにすることで、問題がどこにあるか顕在化することが可能
  • Bugが取れない時は、ChatGPTのo1など、IQの高いAIに解決してもらう
  • gitなどでAIの変更履歴を保存し、方向性が悪くなったら元に戻せるようにしておく
  • 指示を与える人間が問題の根本を理解していないと、うまく解決できないのでまずそこを理解してからAIに指示を与える

あとがき

ChatGPTが発表されたのは、2022年11月30日です。今は2024年10月ですから来月の30にがくると丸2年になるわけですね。  そして、僕らエンジニア業界のワークフローも変わりつつあります。まだ、これに気がついていないエンジニアもいますが、僕はこれらの体験によって今後の仕事で何が大切なのかを改めて考えさせられました。 結局、AIのほうが広範囲にいろんな知識を知っていて頭が良いわけで、細かな構文や、パッケージの依存関係などそういう部分はAIに任せれば良いです。しかし、一番重要なのはそれ以外の人間でしか決められないアプリの方向性や、大切にしたい部分。これは指示を与える人間がしっかりと方向と方針を固めておかないと良いものは作れないな!と感じました。

また、ここには書ききれませんでしたが、以下のアプリも作れることを確認済みです。とにかく、ひと昔前(といっても1年前くらいですが)はこんなワークフローが作れるなんて夢にも思っていませんでした。

  • これ以外にもAndroidネイティブアプリをビルドした
  • Auth認証の面倒なのも作れます
  • macOSやWindowsネイティブアプリも作り始めています

とんでもない世の中になったもんです。ある意味、大チャンス到来といったところでしょうか。プログラムミングの勉強も、AIと一緒にやればより、深く学習できますし。 1つだけ、懸念があります。それはAIが自律的に動けるようになったとき、OSのカーネルにAI機能を統合してしまう恐れがあることです。すごく堅陣なOSができる反面、使い方を誤るとやばい用途にも使われることになります。良い未来にしたいものですね。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

KeyCDNという安いCDNを半年使った感想、価格や月維持費などレポート!

じゃんくはっく
じゃんくはっく

CDNってのを半年、使ってみましたよ

クラウドからコンテンツを配信するってヤツですね。

ぴー
ぴー
じゃんくはっく
じゃんくはっく

どんな効果があって、月維持費はどのくらいかレポートしてみます。

私は、月500円くらいまでなら出せるかなー

ぴー
ぴー

KeyCDNは数年前、1位か2位くらいの安さでしたが、今はもっと安いのがあるようです。CDNのコスト計算サイトでは以下のようでした。blazingcdnというのが破格の安さのようです。

今回は前から気になっていたKeyCDNをこのスマホサーバのWordPressサイトに適用してみましたので、実際どのくらいの値段で運用できるんだ? みたいな感想をレポートしてみたいと思います。

そもそもCDNって何?

CDNは平たく言えば、画像やコンテンツを本家とは違うサーバから配信するというものです。キャッシュサーバとか、エッジサーバとか表現したりしますが、要は静的なファイルを本家サーバからではなく、CDNのクラウドから配信することによりネットワーク負荷や、レスポンス改善(時に改悪)したりするのが目的です。

コンテンツデリバリネットワーク(英語: content delivery network、CDN)

wiki

いくらするの?

ほとんどの人が気になるのは、初期や維持費などの価格がいくらなのか? っていうことと、速度はどのくらい改善されるのか? ってことだと思います。こればっかりは使ってみないとなんとも言えない部分があります。早速、値段からレポートしてみたいと思います。

 まず、KeyCDNは最初にクレジットを入れてそれを消費する仕組みです。最小の入金単位は 49ドル となります。日本円で当時のキャッシュカード換金レートで、5,553円でした。

 入金したのが、2021年の06月/01なので現時点で半年使っていることになります。クレジットの消費は以下のようになっています。

残りクレジットは18くらいです。49から約36%残っていますので半年で67% 消費したことになります。半年で、約3720円ですので、1ヶ月あたり620円という感じですね。

 グラフの途中に、ガクンとクレジットが消費しているところがありますが、これはキャッシュを完全に消去して作り直している部分です。

どのくらいのアクセス数なの?

統計期間が約4ヶ月くらいなので、KeyCDN上のデータでは以下のようです。

1日あたり、cssや画像やhtmlなど合計して1.8万くらいのヒットがあります。PV的な数値は1つ前の記事に載せてありますので、参考にしてください。

1ヶ月のデータ転送量は?

このサイトの1ヶ月のデータ転送量(総トラフィック)は、KeyCDNの統計データで見ると以下のようです。

PV的には2000〜2500くらいでこの転送量です。3000〜5000くらいのPVでも15GBを1ヶ月に超えることはありませんでした。

CDNの効果はどのくらい?

ページ計測サイトで、CDN適用前と適用後のデータを測っておきましたので載せておきます。

まずは、CDN適用前。

次は、CDN適用後。

だいぶ改善されていますね。適用前は、最初のレンダリングが始まるのに、約4.2秒かかっていますが、適用後は、0.8秒です。CDNの効果は絶大です。

まとめ

今回、なんとなくわかったのは以下となります。

・このサイトのようにPVが月に2000〜5000くらいでは、月600円〜700円くらいのCDNコスト

・設定は非常に楽

・CDNの効果は絶大で、最初の描画が4.2秒から0.8秒となった

blazingcdnというCDNはKeyCDNより激安で、どんな効果があるのか試してみたい気もする

あとがき

WordPressのように、コンテンツ側で結構リソースを使うタイプや、スマホサーバのように非力な環境ではCDNの効力は絶大です。しかし、利用コストが月に600円〜700円くらいかかり趣味で使うのなら良いのですが、静的HTMLにして運用したほうが、良いなという結論に至りました。要はWordPressは、リソースを使うし無駄が多いんです。近々、そういう運用に方針を変えますので、紹介したいなと思っています。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

2021/04〜12 site24x7 でのSLA状況・統計データ

じゃんくはっく
じゃんくはっく

この半年以上、スマホサーバは安定稼働してるよ!

一時期、落ちるって言ってたけど原因わかったの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

あー、あれはルータのマルチセッションの設定が原因だった

だから、Bad Gatewayだったのね。

ぴー
ぴー

この半年、仕事が急がしてく記事を更新する気力もなくグタグタと過ごしてきました。やっとまとまった休みも取れた(正月休み)ので記事を更新しておきます。

 site24x7 で監視していますが、最近は安定してきました。SLA統計データを出しておきます。

何を目指しているの?

稼働率・SLA99.95%をスマホ自宅サーバで目指せ!まずは1ヶ月間

LINK

site24x7のスターターパックを2020の10月から始めています。監視サービスでSLAを99.95%目指しています。99.95%とは1ヶ月にダウンタイムが21.6分以内であればOKということですが、最近はほぼ100%を維持しています。一時期、NGINXがBadGatewayになる現象が発生していましたが、これはやっと原因がわかりルータのマルチセッションの設定がよくなかったようです。詳細は省きますが、ドメインによってプロバイダAとBを分けていました。今は、マルチセッションはやめて1つのプロバイダから出ています。

2021・最終四半期のSLA

10月から12月の結果です。障害時間の合計は37 分 17 秒で、SLAは99.972%となり目標の99.95% 以上になっています。ちょこちょこダウンしているのは、大量のダウンロードなどで帯域を潰してレスポンスが一時的になくなる時間などで特にサーバがダウンしているわけではないです。外部から監視しているとそういう瞬断が3ヶ月で37分くらいあったということです。

PHPは、前回の記事でも紹介していますが、PHP7系のちょっと新しいのをビルドして入れています。

どのくらいのアクセス数なの?

ページを表示している回数(PV)は、こんな感じで月におおよそ2500〜5000という感じです。最近は全然記事を更新していなかったので、2000くらいまで下がっています。

検索数で見ると以下のような感じのサイトです。

最近は、MQA関連の音楽ネタと、pixel3のroot化記事関連がほとんどです。

まとめ

今回、なんとなくわかったのは以下となります。

・このくらいのアクセス数のサイトをスマホで安定稼働させることは十分可能

・消費電力などを考慮しても、レンタルサーバより安価で運用を趣味にしている人には良いかも

・しかし、WordPressの運用はクソめんどくさい。正直、もうGithub Pageとか、NETLIFYに静的ページを吐き出す運用にしようかと思ってる。

あとがき

放置ぎみになっている個人のブログっていうのは月にこのくらいのアクセス数で、当初のスマホで安定稼働させるっていう目的も達成したので、そろそろ違う運用も視野に入れています。WordPressとは関わっていきますが、静的ページを吐き出す運用のほうが楽でいいなーと思います。このSLA報告もこれが最後になるかもです。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

TermuxのパッケージPHP7.4.21最新ビルド

じゃんくはっく
じゃんくはっく

最近、仕事が忙しがったー!

もう今年も半分終わっちゃいましたね。

ぴー
ぴー
じゃんくはっく
じゃんくはっく

今回は、TermuxのPHPを最新の7.4.21 にしたよ

最新ビルド作ったんですか?

ぴー
ぴー

Termux のPHPバージョンは、今は8系になっていて7.4系の最終リリースは7.4.12 でした。ちょっと古かったので、2021年7月01日にリリースされたphp7.4.21をビルドしておきました。7系はあと1年くらいは使うつもりです。ところで、xdebug付きはどうやってビルドするんでしょうね。次の課題です。

PHP7.4.21のダウンロード先

Github: termux-php7

LINK

完全にはテストしていませんが、このサイトにも入れながらテストしています。今のところ大丈夫かな?心配な人は自分でビルドして、テストしてみてくださいね。ビルド方法はググってくだされ。

アップデート方法

前の記事で、php8.xからphp7.4.12にダウングレードする方法は書いていますので、今回はアップデートです。

TermuxでPHP7を使いたい! PHP8からPHP7にして使う。

URL

さくっと、バージョンあげてみましょう。

ステップ1

ZIP圧縮したのも以下にあるのでダウンロードして解凍しておきます。

cd 適当なDIR
wget https://github.com/take-i/termux-php7/raw/master/php_7.4.21-aarch64-deb.zip
unzip php_7.4.21-aarch64-deb.zip

解凍すると以下な感じです。

$ tree php_7.4.21-aarch64-deb
php_7.4.21-aarch64-deb
├── apache2_2.4.46-4_aarch64.deb
├── libicu_67.1_aarch64.deb
├── php-apache_7.4.21_aarch64.deb
├── php-fpm_7.4.21_aarch64.deb
├── php-pgsql_7.4.21_aarch64.deb
└── php_7.4.21_aarch64.deb

今回は、nginxですので、本体とphp-fpmを入れておきます。libicu_67は前回(php7.4.12)と同じなのでそのままです。apacheとphp-apacheはまったくテストしていませんので、自己責任で入れるならお願いします。動作しない場合は、ご連絡を。対応するかは別ですが。

ステップ2

アップデートする前に、パッケージが更新されないようしていた場合は以下のようにパッケージ名が出ますのでそれを解除しておきます。

$ apt-mark showhold
php
php-fpm

解除は、unhold です。

$ apt-mark unhold php php-fpm
Canceled hold on php.
Canceled hold on php-fpm.

解除されたか、再度 1つ上のコマンドを実施しておきます。

ステップ3

アップデートといっても、コマンドは同じです。

cd php_7.4.21-aarch64-deb
※以下は今回入れないので削除。
rm apache2_2.4.46-4_aarch64.deb php-apache_7.4.21_aarch64.deb* php-pgsql_7.4.21_aarch64.deb*

dpkg -i ./php*

ステップ4

確認。ちゃんと、7.4.21が入っていますね。

$ php -v
PHP 7.4.21 (cli) (built: Jul 10 2021 16:36:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

勝手にアップデートされないようマークしておきます。

apt-mark hold libicu php php-fpm

マークされたか、確認

$ apt-mark showhold
libicu
php
php-fpm

ステップ4

nginxとphp-fpm を再起動しておきます。このスマホはroot化してあって、nginxはroot権限でmasterプロセスが動作しているので、sudoしてKILLしておきます。

$ killall php-fpm
$ sudo killall nginx
再起動
$ php-fpm
$ sudo nginx

phpinfo()などで確認しておきます。

まとめ

今回、なんとなくわかったのは以下となります。

・termuxのphp最新をビルドしてみた
・テストは人柱として、このホストやっています
・何かあれば報告(してね)
・xdebug付きのもビルドしてみたいがどうやるんだろうか?

あとがき

まだこのブログは、スマホのumidigi F2で動作させています。そろそろ電池を交換したので、pixel3を復活させないとですが、腰が思いです。あと、最近keyCDNも1ヶ月くらい運用していますので、そろそろそのネタも描きたいなと。ついでにアドセンスなんかも運用していますが、これは駄賃くらいにしかならないので、やめた方がいいんじゃないかという感じ。広告でるのは好きじゃ無いし、回避方法は見る側がいくらでもできますしね。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

静的HTMLをWordPressから作るには?

じゃんくはっく
じゃんくはっく

静的ページでミラーサイト作りたいな!

WordPressからHTML作るやつですね!

ぴー
ぴー
じゃんくはっく
じゃんくはっく

GitPagesとかNetlifyとかでブログ運用できるからね

コメントとかメール送信とかは?

ぴー
ぴー

ここんところ、WordPressから静的なHTMLを吐き出して運用するにはどうしたらいいかっていう事を研究していました。このブログは、現在スマホのPixel3やUmidigiF2で作られていますが、静的なHTMLページにできたら、かなり処理負荷が減り、またセキュアな運用ができるので実現してみたいなと思っています。

WordPressは設計が古い、王道のWEB-DBアプリ

WordPressは最初のバージョン1.xがリリースされてもうすぐ20年になろうとしています。付き合いは古く1.xと2.xの変わり目あたりからWordPressをいろんな用途で使っていました。基本的な設計は今も変わっておらず、WEB-DBアプリケーションの位置づけです。

WorePressは、アクセスされる側(フロントと俗にいいます)にPHPがあり、記事の実態や設定などは裏方(俗にバックエンドといいます)でMySQLデータベースが処理する王道なWEB-DBアプリです。図では以下のようになります。

PHP処理時間や、データベース処理時間をなくせば劇的に速くなります。今テストで2つのサーバに静的なHTMLを出していますので、記事の後半で視覚的に評価してみます。

静的なHTMLを吐き出すとどんなメリット・デメリットが?

WordPressがこの構成をしているのは、動的に処理ができるからです。記事の検索や各種プラグイン処理、コメント処理、メール送信機能などです。たとえば、この記事には「目次」がありますが、これは「LuckyWP Table of Contents」というプラグインが自動的に挿入してくれています。こういう固定表示系のプラグインは静的なHTMLを吐き出しても問題ありません。しかし、コンタクトフォーム 7などメール送信系やコメント部分、あるいは検索系は静的なHTMLでは実現できません。

普通にブログを書いて、コメントはあきらめ、PingBack(もう今はその恩恵もあまりない機能)やメール送信、その他動的に生成される機能を無視すれば、WordPressが出す静的HTMLで十分なんじゃないかなと思ったりします。

どうやって静的なHTMLを取得するか?

前置きが長くなりましたが、どうやって実現するかです。クライアント側でwgetコマンドなどを使い取得する方法や、WordPress本体側(プラグインを使って)から取得する方法の2つに大別されます。今のところ、プラグインを使ってHTMLを吐き出す方法が良さそうかなと思っています。実際に試して評価したのは以下2つです。

Simply Static

https://ja.wordpress.org/plugins/simply-static/

もう一つはこちら。

Export WP Page to Static HTML/CSS

https://wordpress.org/plugins/export-wp-page-to-static-html/

両方とも、Pro版があります。今のところ、後者の「Export WP Page to Static HTML/CSS Pro」は現時点の最新がver1.0.4ですがバグがあり正常に取得できません。またスラッグ にマルチバイト文字列があるとファイル生成時にURLエンコードされたファイル名で保存されてしまいます。(リンクされず404になる)この問題はSimply Staticでもありますが、英数字スラッグ であればSimply Staticでは問題ありません。もう少し様子を見て、良さそうならSimply StaticのPro版を検討しようかなと思っています。こちらはGit連携があるようで、完全に静的HTMLを他のWEB領域にデプロイすることができそうです。

Simply StaticのGitHub統合

https://patrickposner.dev/docs/simply-static/github/

静的ファイルをGitHub Pagesに出してみた

このブログを微調整した開発サイトから、Simply Staticを使い静的なHTMLを出力しGitHub Pagesにコミットしてみました。ドメインは独自ドメインにマッピングしてあります。SSLも自動ですので便利。

Github Pagesミラーサイト

https://jh2.gpl.jp/

こちらの応答時間はsite24x7の監視で以下のようです。

東京観測地点からの平均値は128ms です。速いですね。

静的ファイルをNetlifyに出してみた

GithubPagesのリポジトリにコミットすると、Netlifyにもデプロイされるようにしています。こちらも、ドメインは独自ドメインにマッピングしてあります。SSLも自動ですので便利ですね。

Netlify (ねっとりふぁい)ミラーサイト

https://jh.gpl.jp/

世界にはいろんな静的サイトホスティングがありますが、このNetlifyは無償でも使える有名なところです。こちらの応答時間はsite24x7の監視で以下のようです。

Netlifyの方は、東京から平均835ms です。Github Pagesのほうが速いですね。

比較のため、スマホサーバからの応答時間も

スマホサーバ、WordPress+NGINX+php7.4.x+mariadbでの応答も比較のため出しておきます。これは、KeyCDNを使ったりキャッシュを調整したりいろいろチューニングしています。

Pixel3 スマホサーバ
 WordPress+NGINX+php7.4.x+mariadb KeyCDN

https://hack.gpl.jp/

site24x7の監視で以下のようです。

東京観測地点からは、平均385msです。ちなみに、KeyCDNを経由する前は以下のようです。

平均1.27秒なんでかなり遅いですね。KeyCDNの効果は劇的です。でも1ヶ月に1000円弱かかるんですよね。

また、これ以外にもLargest Contentful Paint(LCP)という指標があり、簡単に言えばユーザーがそのページにアクセスしたとき、一番大きな画像またはテキストブロックが描画される時間です。具体的にウチのブログの場合は、以下がそれです。

これも、KeyCDNを使うと1.3秒くらいまで縮まりますが、使わないと4秒くらいかかってしまいます。しかし静的HTMLサイトなら、時間帯にもよりますが1秒から1秒弱くらいになります。

WordPress構成のサイトだと、いろいろチューニングしないとこのくらいの速度にはなりません。結構面倒で、CDNを契約するとそれなりにコストがかかります。月間1万ページビューくらいのブログでも1000円くらいはCDNに持っていかれます。何も意識しなくても、静的HTMLページだとそれより速いですからね。しかも、GitHub Pagesや、Netlifyを使えば無料の範囲で実現できます。

まとめ

今回、なんとなくわかったのは以下となります。

・静的HTMLファイルだけで運用してみる価値は十分にあるが、迷う
・とりあえずミラーサイト的な位置づけで実験運用
・静的HTMLにした場合、検索、メール、コメント、Feedをどうするか?
・逆にそれ以外はほぼ、WordPressの動的機能を使う必要性は感じない
・全記事、スラッグ を英語にするにはどうしたら?自動変換してくれるプラグインとか?

あとがき

ほんとWordPressって手間がかかりますね。こういうのが面倒なんで、アーキテクチャーがオワコンとか言われているんです。

しかし、WordPress がnode.jsで動作して、設計も一新される時がいつかくるかもしれません。新しいものが必ずしも良いとは限りませんが、確実にアーキテクトは変化していきますので、何が最適なのかはいろいろ実験して手法を知っておくことが大切だなと思っています。チューニング次第では、apacheもnginxに近づけますし(面倒ですが)、WordPressも静的サイトに近づけることは可能です。まぁでも、実際は楽でセキュアなのが良いですよね。今時、sendmailなんて使いませんし、WEBサーバはnginxが主流です。

仕事では、あまり実験できないので趣味の範囲でいろいろ実験しておいて使えそうだなと思った手法は実際に仕事にフィードバックしていきたいですね。月〜金で仕事でmac使って、土日もほとんど同じような事をやっていますので、この業界が好きなんでしょうね。というか、オタクなだけですが。。。

ネットとPCと通販があれば、場所はどこでも生きていけそうです。ログハウスとか、手作りしながら、ブログ、Youtubeで配信する生活に憧れます。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

TermuxでPHP7を使いたい! PHP8からPHP7にして使う。

じゃんくはっく
じゃんくはっく

今年の初めくらいからtermuxのPHPは7から8に上がったようですね!

何か不具合でも?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

WordPressを動かすには少々、問題ありで。

termux はダウングレードできないですよね?

ぴー
ぴー

先日、termux上でNGINXとPHP-FPMの設定記事を書いたときに気がついたんですが、termuxのPHPって7から8になってPHP7はもうPKGがなく入れられませんでした。

TermuxでNGINX+php-fpm+mariadbを動かす具体的な設定例

Link

で、一つ前の記事でPHP7を暫定配布していたのですが、ビルドしたのでその過程とビルドしたPHP7のdepパッケージをどうやって入れるのかネタにしようかと思います。

ビルドしたPHP7のダウンロード先

GITHUBに、ビルドしておきました。arm64bitのCPUを使っている方向けです。32bit版はありません。

Github: termux-php7

LINK

インストールの仕方は簡単に記載しておきます。

(1) 一旦、PHP8関連を入れておく

とりあえず一旦、アップデートしておきます。アップデートできない人は1つ前の記事を見てください。

$ pkg update $$ upgrade

その後、php8やphp-fpm、php-apacheなど入れておきます。

$ pkg install php php-fpm php-apache

今入っているバージョンを再確認しておきます。

$ dpkg -l | grep php

2021/06/01現在ですと以下が最新です。

$ dpkg -l | grep php | cut -b 4-35
 php                8.0.6       
 php-apache         8.0.6       
 php-fpm            8.0.6 

PHP8関連だけ消す

例えば、上の3つPHP8関連だけ消したい場合は以下のようにします。

$ apt purge php php-apache php-fpm

ちゃんと消えたか、1つ上のコマンドをタイプして確認してみましょう。

PHP7をダウンロードしてインストール

php-pgsqlは今回入れないので、消しておきます。

$ wget https://github.com/take-i/termux-php7/raw/master/php7.4.12-aarch64-deb.zip
$ unzip php7.4.12-aarch64-deb.zip
$ cd php7.4.12-aarch64-deb.deb/
$ rm php-pgsql*
$ dpkg -i ./php* ./libicu_67.1_aarch64.deb

以下のようになっていればOKです。

$ dpkg -l | egrep "php|libicu"
ii  libicu             67.1           aarch64
ii  php                7.4.12         aarch64
ii  php-apache         7.4.12         aarch64
ii  php-fpm            7.4.12         aarch64

apache や、nginxの設定をしてみてphpinfo()関数が動作することを確認しておきました。libicuだけ最新の環境から下がっていますので、何かこれ関連で入れられないパッケージが出るかもしれません。何かあれば教えてください。

PHP7をアップデートしないよう設定

今入れたのがアップデートされないよう設定しておきます。

$ apt-mark hold libicu php php-apache php-fpm

確認は以下で。

$ apt-mark showhold
libicu
php
php-apache
php-fpm

ホールドを解除したい場合は、apt-mark unhold <package-name> で解除できます。

まとめ

今回、なんとなくわかったのは以下となります。

・ビルドするときは、dockerイメージをubuntuに実機に作ってあれこれする
・これはまた次回に紹介
・termux独自のパッケージ管理のバージョンなどについては未調査
・とりあえず、PHP7はapacheでもnginxでも使えるようになった

あとがき

WordPressなんかを動かすときは、まだPHP7が安定しています。この前、PHP8で動かしてみたんですが対応していないプラグインなどもあり、またWP-CLIというコマンドラインのツールも警告を出します。ということで、PHP8はもう少し、様子見となりました。termuxでPHP7とか勉強している人もいると思うので今回のネタは少しは需要があるかもしれません。やっぱりビルドするって、面倒ですしね。いつか、その過程も紹介していきたいです。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。