こんにちは。あとむです。
前回の記事でOSS開発を始めることと、まずはイシューを解決することでOSSに貢献すること、そして対象とするイシューを決めました。
phpMyAdminでソートを保存する設定にしているのにテーブルを移動すると元々かけていたソートが解除されてしまう不具合ですね。やってみましょう。
環境構築
まずは環境構築です。環境を構築して不具合を再現するところまでまずは進めます。
せっかくなのでDockerで環境を作ろうかなと思うのですが、お恥ずかしながらDockerそこまで得意ではないんですよね。。。頑張ります。
一般的にDockerでphpMyAdminを使いたかったらphpMyAdminのイメージを使うんだろうなと思います。
ただ今回はphpMyAdminそのものを編集する必要があります。
イメージで引っ張ってくるとイシューは再現できてもphpMyAdminのソースを編集することができないので、今回は普通にApache×PHP×MySQL環境を用意して、そこからコンテナに入ってgit経由でphpMyAdminをデプロイするのがよいのかなという感じです。
というわけでやってみます。参考にしたのはこの記事
Laravelをデプロイする記事ですが先ほどの通りLaravelのインストール以外は同じなので、DockerFileとdocker-compose.ymlの書き方は同じなはずです。。。多分。
$ tree
.
├── docker/
│ ├── app/
│ │ ├ Dockerfile
│ │ ├ php.ini
│ │ └ 000-default.conf
│ └── db/
│ ├ data/
│ └ my.cnf
│
├── src/
└── docker-compose.yml
$ docker-compose build
$ docker-compose up
// phpmyadmin-17617はコンテナ名
$ docker exec -it phpmyadmin-17617 bash
無事にコンテナが立ち上がりました!よかった!
次に下記記事をもとにリポジトリのフォークからブランチ作成まで行い、phpMyAdminのインストールまで行います。
$ git clone https://github.com/atomu330/phpmyadmin-17617.git
$ composer update
$ yarn install --production
composer update
がモジュール不足で動かなかったり、yarn
がそもそも入っていないなど色々ありましたが、何とか修正してphpMyAdminの画面を表示することができました。
映った!!!!思ったより時間がかからなかったのでとても嬉しい!!
いざ不具合を修正!!
というわけで早速不具合を修正します。
OSSの中身なんて見たことすらほとんどないので怖気付いていましたが、結局PHPはPHPなのでデバッグにも慣れており、そこまでつまづかずに原因特定まで辿り着けました。
上だけ見ると「初のOSS開発で楽勝で不具合を修正した凄腕エンジニア」みたいに見えるかもしれませんが、それもこれも全て不具合の原因が「空の配列で初期化している変数($param
)を!isset($param)
で条件分岐していたから」という単純なものだったからですね。はい。
(isset([])はTRUEになる)
根っからのPHP使いとしてはこの辺の分かりづらい仕様による不具合は何度も経験ありますから。楽勝でした。とはいえ1時間ちょいかかりましたが。
というわけでさっさと修正してPRを作成しました。
凄腕エンジニアの知恵の結晶であるOSSでもこんな簡単なミスがあるんですね。
まあ僕の勘違いだったらすごい恥ずかしいけど。
(!issetをemptyにしたら不具合が解消されたので多分合っている。。。と信じたい)
そんな感じで今日のところは一旦やるところまでやったのでここで終わりにします。
マージされると嬉しいな。。
2日後・・・
マージされた!!嬉しい!!!
初めてのOSS開発をやってみて
初めてOSS開発やってみてですが、とてもいい経験になりました。
仕事とは違って自分の好きなように環境構築や使う技術(OSS)を決めれるので、自分の使いたい技術などを好きに選んで開発できるのがすごく勉強になったし、楽しかったです。
あとPRだした時に返事で、全然知らない人から「Thank you」って言われるの結構嬉しいですね。うん。
OSS開発をすることでエンジニアとして何か評価が上がることが見込めるとか、給料アップが狙えるとか、そういう側面については全くわかりませんでしたが、何となく定期的にOSS開発自体は続けていきたいなと思います。
そしていつかは自分でオープンソースを作りたいですね。ちょこちょこいい案はあるんです。「LaravelのCSVアップロードの時にRequestクラスでバリデーションできたら嬉しいな」みたいな。
そんな感じで終わろうかと思います。ありがとうございました!