IT

WordPressから移行しなくても良いかも

Notoも書いてなければBlogも書いていないのですがTwitterとDiscordには生息しているりっくんです。

去年の2月にこんな記事を書いていました。

「移植」って表現が正しいか?とは思っていますが、記事の中に書いてあるとおり少し表示が遅かったりいい加減WordPressに固執する必要も無いので今どきっぽい感じにしてもいいかも?という内容を書いた記憶があります。

移行したい記事書いたかのサマリー

  • 環境がSAKURAのVPS メモリー2GBプランでその上にKusanagiのDockerコンテナを建てている構成
  • Nginx+PHP-FPM+MariaDB
  • やけにアクセスに時間がかかっていて、メモリー使用量がやばかったから原因はメモリーかなと思っていた
  • ついでに、AWS Lightsailの4GBプランを移行用に契約までした

しなくていいかもの経緯

ちょっと前に、Next.jsのテンプレートに、WordPressからデータをフェッチしてきて静的サイトを生成する物があると知った。
ということは、静的サイト化できるじゃないか!爆速じゃん!ということで、すごい簡単にできそうだから試してみたんだけども、「WPGraphQL」プラグインがPHPのバージョン7.2以上じゃないと動かないとエラーが出てしまった。

実際に見てみたらPHP7.0系のPHP-FPMを使っていたのと、PHP8にしたほうがいいよ!的なメッセージが書いてあったから
「まぁWordPressだしPHP8くらい動くだろ!」
と、安易な気持ちでPHP8のイメージに差し替えたらテーマとプラグインが全滅して全くアクセスできなくなってしまった。

ちょっとだけなら直そうと思ったが延々と出てくるエラーに耐えきれず、

  • PHP7.4のイメージに変更して
  • WordPressも6系までバージョンアップして動かし
  • 無事WPGraphQLをインストールして
  • 実際にNext.jsの設定をして
  • Buildして動くところまではローカルで確認した

で、Next.js自体は正常に動いたんだけど(一部、next/Image関係のエラーは吐いていたけど簡単に直せるレベル)そもそもこの辺のバージョンアップをしたらそもそものWordPressがすごい速くなってしまったんですよ。

スコアも91で良い感じ

一部対応はしたけどそれでも高速化したので、あれ、移行する必要がなくない?という感じになってしまったというのがこの記事の趣旨です。

なんで遅かったの

結局メモリーが悪いのではないかというのは自分の思い込みだったのですが、PHP-7.2にした部分は多少影響があるのかなぁというの、WordPressのバージョン上げたのは・・・あるのかなぁ。

プラグインとかもあまり入れていないので思えば異常な遅さだったのですが、これ以上は掘り下げないと思います。

まぁそもそも7.2からもっと上げないとサポート的にはよろしくないのでテーマも標準にしちゃおうかな・・・、もうBlogのデザインに対するこだわりは無くなってきたので。

Kusanagiを使っていて

別にKusanagiである必要は全然ないのですが、標準的な環境でこの速度のWordPressになるのかは少し気になっています。

ただし、Dockerで動かすことのメリットは今回非常に感じていて、試しにPHP8化できたということは今後Kusanagiがメンテされている限りはPHPのバージョンに合わせて環境を上げていくこともできるのは非常に良い環境だなと思っています。
※普通にaptとかで入れちゃうと地味にバージョンアップめんどくさいので・・・

移行も楽なので、現在はAmong UsのDiscordプレイ用Botを動かすためだけに置いてあるLightsailのサーバーは、何かの時に遊べるサーバーとして動かしっぱなしにしておく予定です。

終わりに

ということで、無事高速化を果たしたのでBlogを更新したのでした。という記事でした。

WordPressから移植したい

すっかりこのBlogも放置しちゃってる。

タイトルの件だけど、かれこれ10年くらい稼働させているこのWordPressも実際にはWordPressである必要が全く無い状況だったりする。

具体的には、プラグインとかほとんど使ってないしけしてもいい感じのものが多い。
さらに言えば、Kusanagiで建ててるんだけど、Docker環境にしているのもあってちょっとメモリ使いすぎで思ったよりも(サーバースペックに依存してるとは思うんだけど)早くならないなぁという課題感がある。

個人的にNext.jsを最近触っていることもあり、Blog自体を静的サイトとして再構築するのが一番良さそうだし、モダンな技術の勉強になりそうなのでモチベーションとしては高め。
その時の課題としては、現状のWordPressの記事データとか画像データとかを、プロジェクトに移植するのがめんどくさいなぁというのが・・・。

とりあえず、まずはそのへんの調査を行おうかなぁと。
Next.jsでBlog作るとかいっぱいあると思うし、後は画像とかも自動で小さくしたのを配信できるのかな?ちょっと調査が必要そう

今日はこんなとこ。

#02 create-react-appについて

ということで久々にReact.jsを触っているわけだけど、create-react-appが使いやすくなったように感じる。
初期からあるApp Componentがいつの間にかFunctional Componentになっていたりと、そっちに寄せてるのも良いなぁと。

ほとんど

yarn start

だけで良いというのは、とりあえず始めるときにすごく便利だけど、やっぱしボイラープレート的なものは作っておいたほうがいいかも。
reduxもreact-router-domも無いので・・・。

material-ui

やっぱし良く出来てるなぁと思いつつ、Style部分がよくわかってない。
今回のBlogシリーズはひたすらよくわからないところとかを垂れ流して、どこかで見直す・・・のか?って感じになりそう。

Github Actions

これもちょっと触ってみた。
Firebaseと相性良すぎて困る。今後もうこれでいいんじゃないですかね・・・。

#01 久々にReact.js

この間のUdemyのセールで久々に動画を買った。
フロントエンドエンジニアのための React ・ Redux アプリケーション開発入門 | Udemy

業務で使う機会がないから結構すっぽり忘れててなかなかつらい。
というか、Hook周りあまり追えてないのでその辺は書きながらやっていこうと思う。

とりあえずcreate-react-appの使い勝手が上がってる気がしてよい。

Vue.js Nuxt.js

この間、業務でVue、Nuxtを使う機会があったけど、その前にReact.jsをやってた関係もあって結構混乱した。
ちょっとやった感じだと個人的にはReact.jsのほうが書きやすい。

macOS Catalinaでlsyncdが動かなくなった話

1週間くらいハマっていたりっくんですこんにちわ。

lsyncdとmacOS Catalinaについて

Catalinaに更新してから、lsyncdのファイル変更検知が効かなくなっていた。
権限周りで色々初期化されたからそのへんかなぁと思って、追加してみたりしたけどだめだったから切れそうになってたんだけど、これっぽい。

macOS Catalina の読み取り専用のシステムボリュームについて - Apple サポート
macOS Catalina で NFS が動かない問題に対応する - Qiita

つまり、lsyncd.confとかにはこういう書き方をしないといけない。

sync{
  default.rsync,
  delete = false,
  source = "/System/Volumes/Data/Users/{username}/{sync_dir},
  target = "centos@192.168.xxx.xxx:/home/centos/share/web",
  exclude = {
    ".DS_Store",
    "node_modules/*",
    ".git/*",
  },
  rsync = {
    binary = "/usr/local/bin/rsync",
    archive = true,
    compress = true,
    group = false,
    owner = false,
    update = true,
    sparse = false,
    _extra = {
        "--omit-dir-times",
        "--omit-link-times",
    },
  }
}

絶対他にもハマってる人いると思う。
Docker for Macのファイルマウントが遅い問題で、rsync系使ってる人が自動更新でlsyncd使ってるとか・・・。

Firebaseがすげー便利でびっくりした

なるべくBlogに記事を書いていきたいと言ったので積極的に「良い!」と思ったことは記事にしたいりっくんですこんにちは。

とりあえず、進捗はこんな感じです。

Firebaseいいかもしれない

先日の記事で、Firebaseを使おうと思う、でもここまで手を広げていくと大変かなぁとか言ってましたが、
React.js(やっと)使ってみてる | SteadyWorX

firebase
バックエンドは書かなくていいかなぁなんて思ってたんですが、この感じだと適当にAPIサーバーくらい作ったほうが良いかもとなって、もういっそfirebase試すか!って感じになっています。で、ググってたところで整理がてらBlogにまとめてる。
firebaseもちょっとだけ触ったんですけど、RDBばかり触ってたのでNoSQLはまともに触ったことがなくて、どういうDB設計にしたら良いかからちょっと記事を読んでる段階です。
Firebase Realtime DBを実践投入するにあたって考えたこと – Qiita
でもこうやっていろいろな技術に手を加えていくと、だんだんわからないことの許容量が増えて死ぬというミライが見えますね、ツライ。

実際に触ってみたら結構簡単で、且つやりたいことがそのままできそうなのでこのまま採用しようと思いました。という話です。

Realtime Database

FirebaseのDB機能、NoSQL系だってことしかしらなくて、よく見たらRealtimeって入ってるんですね。
で、そこから色々見ていったら、やっぱし更新を検知することができるっぽいんですよ(というか、そういう使い方がメインなのかな?)

ということで、現在のリロール状況を保持しつつ、更新があったらstateを変更する感じのコードを買いてみました。
実際の動きがこちら

これはいいですね、これならチームごとに更新をリアルタイムに取ってこれます。

後はこの辺に所持チャンプ情報周りもすべて格納していけば結構いい感じになるんじゃないかなぁというのが今のところの感覚です。
楽しくなってきた!!!!

React.js(やっと)使ってみてる

ちょっと体重がやばい感じになっていてゆるくダイエット中のりっくんですこんにちは。
Blogの更新、いよいよちゃんとやっていきたいので最近やってることでも書いておきます。

React.js触ってる

  • 作りたい物
  • 作る時間
  • モチベーション

全部がないとなかなか新しい技術がさわれません。
すげー広くの分野でHello Worldレベルは触ってるんですけど、なかなか理解できないですね。

2周遅れくらいではあるものの、Reactは触りたかった技術の一つなのでこれを気にちょっと使ってみています。

こんなの作ってる


League of Lgendsっていう神ゲーがあるんですけど、いま一緒にゲームをしている人はARAM(All Random All Mid)をよくやるメンバーで、5人を超えると8人、ないしは10人頑張って集めてカスタムゲームを開催しています。
ですが、カスタムゲームのARAMではリロールが出来なくて、しょうがなくドラフトピックのARAM(Randomではない、ハウリングアビスマップのドラフトピックというだけ)を行っていました。
※リロール = 完全にランダムだとツライので、最高2回、自分のチャンプをまた振り直すことができる。

それを雑にWebアプリ化すればなんとかならんかなぁと思ってふらーっと休日、夜間にポチポチ作っているという状況です。

わからんことだらけでつまりまくって入るんですが、これが結構面白いですね。
jQueryで作ったらまぁ形はできるんだろうけど、データがごっちゃごっちゃになるので今回はReact.jsを使っておいてよかったような気がします。

eslint

後ついでに、eslintも入れてAirbnb JavaScript Style Guideも適用させてます。
これはTwitterに書いたんですが、

でもこの大リーグボール養成ギブス的な感じ、好きだわ。出来上がったコードも読みやすいし。

です

機能が足りない・・・

で、まぁとりあえずリロールできるところまで来たんですが(くっそ見にくいけど、名前の横にREROLLボタンが有る)話していて

  • やっぱし自分が持ってないキャラが出て来るのって微妙だよね
    ユーザー管理と所持チャンプ登録したい
  • この状況を共有できないとめんどいよね
    これは、URLで共有できるようにしたい、パラメーターに全部突っ込んで的な
  • デザイン、案はあるけどちょっとまともにしないと

等々、色々課題があります。

firebase

バックエンドは書かなくていいかなぁなんて思ってたんですが、この感じだと適当にAPIサーバーくらい作ったほうが良いかもとなって、もういっそfirebase試すか!って感じになっています。で、ググってたところで整理がてらBlogにまとめてる。

firebaseもちょっとだけ触ったんですけど、RDBばかり触ってたのでNoSQLはまともに触ったことがなくて、どういうDB設計にしたら良いかからちょっと記事を読んでる段階です。
Firebase Realtime DBを実践投入するにあたって考えたこと - Qiita

でもこうやっていろいろな技術に手を加えていくと、だんだんわからないことの許容量が増えて死ぬというミライが見えますね、ツライ。

何にしても楽しい

実はいろいろあってこんなことしてる場合じゃないんですが、割りと楽しいです。
ぱぱっと作ってやることやらないと。

Franzが良い

どうもこんにちは、会社にWQHDの27インチモニターを持ち込んでいるのですが、会社を4Kに、家にそのモニターを戻したくてたまりませんりっくんですこんにちは。
FullHDはツライ体になってしまった・・・。

とまぁそれは関係なくもないんですが、Slackのアプリが重いなぁとずーっと思っていて、Twitterを眺めていたら「Franz」というアプリが良いと聞いて入れてみました。

Franz

Franz – a free messaging app for Slack, Facebook Messenger, WhatsApp, Telegram and more

まぁ何かといえば、いろんなアプリを一つのウインドウで管理、タブで表示が切り替えできて、中身はWebView的なものが表示されるってだけなんですが。
それでSlackの幾つかのチャンネルと、Discord、Google Play Music何かを突っ込んで一つのウインドウで完結させてます。便利です。

詳細は適当にぐぐって見てみてください。

で、Google Play Musicなんですがこれ、デフォルトでは利用可能なサービスに入っていません。
それらはまだBetaっぽいのですがプラグインで対応できるようで、有志がGithubなんかにコードを上げてくれています。

meetfranz/plugins: Franz Plugin Repository

ここからGoogle Play Musicのプラグインを落としましたけど、普通に便利です。

自作プラグイン

中身をみてみたらすごい簡単なので、とりあえず今日ちらっと雨が降った的なTweetを見たので、アメッシュのプラグインを作ってみました。
こちらのレポジトリからZipでDLして、Pluginフォルダに突っ込んでください。多分動きます。

Remicck/ameshu_franz

これ、自作のIRKIT操作アプリなんかを突っ込んでおくのも良いかもしれないなぁ・・・。

※でも、4Kモニターになったらいらなくなるかもなぁ・・・w

株式会社オプトが作成したクイズアプリを試した話

Hello 2017!! 今年もよろしくお願いしますという事で、年末は掃除、年始1日から仕事の対応でSQLを流しておりましたりっくんですこんにちは。

さて、その年始のお話です。

はじめに

今回は株式会社オプトが作成したクイズアプリを、実際に元旦に試したことを書いていきます。
主に使用感と、改善するなら~という点、躓いたところを書いていく予定です。

感想ですが、非常に良くできていて、親族全員で楽しめました。
このようなアプリケーションをMITで公開してくださったオプト様に感謝し、記事として残すことにします。

アプリケーションについて

会社の納会用にクイズアプリを作りました(React / TypeScript) - Opt Technologies Magazine
会社の納会用にクイズアプリを作りました(Akka HTTP) - Opt Technologies Magazine
opt-tech/noukai_quiz_app: オプトの納会でのクイズコンテンツのために作成したアプリを公開したものです。

これです。
詳しくはBlogとGithubのReadmeを参照してください。

react-akka-aws

環境

アプリケーションがWebSocketを使ったインタラクティブなクイズアプリだったので、自分のさくらVPSでは非力且つ、現環境を壊したくないなぁと思いAWSを利用しました。
t2.microのインスタンスを立ち上げ、Java8、Nginx、Node.js、その他もろもろのインストールを行って簡単に構築しました。

はじめ、Apache2.4でリバースプロキシを噛ませようとしましたがうまくいかず、フロントはNginxにしてあります。
また、キャッシュにより問題Jsonが更新されないことが多々あったため、キャッシュもOffにしました。

この辺は僕の知識不足に起因すると思いますので、(そもそも、Portを開けておけば、Javaの実行プロセスに直接アクセスできるんじゃないのか!!って思ってました。MacのローカルでテストしているときはLocalhost(HTTPサーバー無し)で動いていたので)うまくできる方はそちらでも良いと思います。

カスタマイズする部分について

こちらで変更する部分は

  • 問題用のJsonファイルの編集
  • ログイン時に”部署”を入力するようになっていたので、今回の親族でのクイズ大会という名目上、「○○ファミリー」という項目に変更してあります。
  • 「にゃーん」という音が出るボタンは、我が家用に「たらったらったー」という、まぁ身内ネタ用音声ファイルに変更してあります。
    ※この機能は最終的におまけで計測され、ランキング最後に発表されます。
  • 50位から表示されるが、デフォルトの名前が「開発 uryyyyyyy」となっていたので、点数と合わせて差し障りのない値に変更。(dev-server.es6)

上記の4点ほどです。

使用感

下準備

もともとは新しい家族が増えるにあたって、親族のことを少しで知ってほしいということで企画しました。
その為、問題は「自分・家族に関すること」に限定しておきました。
※半分くらいはドジ話とかだったような気がしますw

問題選定は、いろんなものを集めたかったので親族に頼み、はGoogleフォームに投稿できるようにしておきました。最終的に31問も集まってしまって、1時間弱はやっていたような気がします。
この辺は、せめて15問くらいに制限したほうが良かったですね。ただ、Googleフォームを使う選択は正解でした。

実際にやったときの事

うっかり写真を撮り忘れてしまったのですが(出題でテンパってて)、人数的には18人が接続し、大盛況でした!

AWSの無料枠でやろうと思っていたので、t2.micro(vCPU 1, Mem 1GB)で構築していたのですが、18人繋いだ時点でサーバーがハングしどうもSSHの画面も反応がない事態に・・・。
この点はAWSで良かったと思いましたね・・・。一度落として、すぐにm4.xlarge(vCPU4, Mem 16GB)に引き上げ、オーバースペックだなぁと思いつつもまぁ安定稼働するほうが優先、ということで最後まで動かすことができました。

うちの環境だったらこの方が良かった!ってやつ。

クイズに正解すると、画面が虹色にグラデーションします。
おそらくこれは、企業の納会用なので正解した人がわかりやすくなるような配慮だったと思うのですが、我が家の用途では、「選択肢と、回答、正解と、当たったかどうか」を表示してあげたほうが良かったと思います。

もしくは、ちゃんとプロジェクターを用意して、問題、回答用にスライドを作り、同時にめくってあげるとかでしょうか。

また、もし家族やコミュニティで利用する場合は「にゃーん」を絶対に変えたほうが良いです。
今回、我が家のテーマ(とも言えるような、謎の音楽 たらったらったー)の音源を利用しましたが、なかなかカオスな感じになります。

理想は2秒ほどのものが良いので、誰かに吹き込んでもらうのが良いかな。

終わりに

とてもとても、楽しめました!
特に実際やった感覚では問題は「経験した中で、やってないものを一つ選べ」が、今回うちのコンセプトとマッチしていました。(これなら3つは正解で、いろいろなことを伝えることができる)

また、AWSを使えばかなり小さい金額で行えるのも良いですね。
勉強がてらに触るのもありだと思いました。

再三になりますが、株式会社オプト様、ありがとうございました。
時間があれば上記した、Forkして結果画面のカスタマイズはやってみたいです(来年の課題として親族に言われてはいます・・・)

SlackからDiscordに移行した

引っ越してやっとこさ生活が落ち着いてきた感が出てきておりますりっくんですこんにちは。
ついにソファーも購入しまして、かなりゆったり生活できるようになりました。Chrome Castも勝ったので、ソファーでまったりTwitch、Youtubeを見る生活が確立しつつあります。

Discord

ずーーーっと、Slackいいよ!って言い続けていたわけですが、ゲームをするメンバーでVCを行うならばDiscordというメッセンジャーがかなり良さそうなので紹介です。

Discord – Free Voice and Text Chat for Gamers
discrod

すごく簡単に説明すると、VCがついたSlackクローンです。ほとんどSlackです。
チャットとかファイルを送る部分、あとモバイルアプリの出来等はSlackレベルですごく使いやすいです。

そこに、ボイスチャットの機能が付いているのでゲーマーとしてはすごくありがたい。
チャットの延長でVCがあるのは誰もが感じていることだと思うのですが、VCだけ別のツールを使うとチャットが分散される問題とかがありました。(ずっとSkypeの人たちはないかもしれませんが、私がMumbleという糞チャットなツールを使っていたので・・・)

discord_view
画面はこんな感じです。Slackでしょ。

VC部分はWebRTCを使っているようですが、ほとんど遅延や音質の悪さは感じません。重さも特に気にならないかな?
今時のVCツールにはある、ユーザごとの音量調整や、チャンネル移動機能、権限の管理ができるのでほとんどのVCツールから移行可能じゃないでしょうか。

また、SlackでいうIntegrationの機能もあります。当然APIもあります。
ユーザが作ったBotを、自分のチームに突っ込むことができるので、うちのチームではRSSを管理してくれるBotを入れて、LoL関係のブログ通知をそのBotにさせています。
Slackの時は無料プランだとIntegrationの数に制限がありましたが、Discordはどうなんでしょうね。

LoL eSportsのプロ観戦者になる為のSlack Bot作った | SteadyWorX

RSSの通知は、Slackの時はGoogle App ScriptとSpreadsheetsを使って投稿させていましたが、Botを使うことでURLの追加は
!rss add <url> の形式でよく、かなり楽です。他の人も簡単に追加できます。

他にも探すといろいろなBotがあって、
GitHub – Gravebot/Gravebot: An awesome bot for Discord
これなんか、サーバー、ユーザ名を指定するとその人の今のマッチゲーム情報を引っ張ってくれたり、現在のおすすめBanとかを教えてくれます。まぁ日本鯖まだ対応してないですけど。誰かPRしてあげt・・・・!

そんなわけで、SlackからDiscordに移行しました。
まだまだVCが必要ないチームはSlackを使っていますが、こうやって代替案が出てくるのはいいですね。丸パクリはどうかとも思いますけど。

ちょっとAPIとか調べて、遊んでみたい感じでした。