有限会社アップルップル / エンジニア
[Part2]有限会社アップルップルさんでエンジニアインターンシップをさせていただきました。
有限会社applepleさんで、エンジニアインターンシップをさせていただきました。 代表のかずみちさんと面談させていただいた事がきっかけで、参加させていただきました。 会社説明という目的の面談でしたが、インターン生がいると聞いた私はすぐさま『自分もインターンさせて欲しい!』とお願いし、無理を聞いてくださいました。HTML、CSS、JavaScriptの基本を抑えている事が参加の条件とのことでしたが、私はインターンに参加したい一心で「勉強しました!」と返事をし、インターンシップに参加させていただくこととなりました。実際のところは全くなくJavaScriptの経験はなく、インターン2日前に猛勉強し後から辻褄を合わせました。(かずみちさん、すみませんでした…) 3日間の試用期間からスタートし、その期間の出来が良ければ長期インターンシップに参加させていただけるという流れです。 (3日間試用期間の記事:https://www.wantedly.com/id/shin6142/items/371ea927-a808-4732-8670-b9289d2518ba?fbclid=IwAR1L9xFIDXngX-YM4JeRaGtv3vZ-l3dwLHkxAAAEgohRhgn6yrfLpXxuo90 ) 本記事では長期インターンシップでの経験を紹介します。 [課題] ”a-blog cms の本番環境をテスト環境にコピーする PHP のプログラムを書いてみる” 課題の目的:本番環境DBと更新される各種ディレクトリをテスト環境にコピーをする機能を作り、本番環境のバックアップを取れるようにする。 [開発環境] 言語:PHP、DB:MySQL、ローカルサーバー環境:MAMP、本番サーバー環境:Xserver [開発期間] 6時間 × 7日間(一ヶ月間、週2ペースで出勤させていただきました。) [開発人数] 1人 長期インターンシップ前の知識・技術レベル: ・HTML・CSS・JavaScriptでのフロント開発経験 ・Java 、PHPの基礎構文の知識 ・Ruby on Rails、 MySQL、AWSを使ったWebアプリケーションの開発(CRUD)を経験。 プログラミングの基礎的な理解、サービス開発の一連を理解。 ・DBやインフラはハンズオンなどを参考に設定しただけで、何がどうなって動いているのかという深い知識はない。 課題の実装に必要な4つのステップ ①MySQLのDBをコピーする ② archives , media , storage (本番環境で画像など更新されるもの)のディレクトリをコピーする ③3. MySQL の一部のレコードを修正する acms_blog の blog_domain フィールドをテスト環境のデータにする ④Xserver上で運用できるようにする。 各ステップで学んだ事柄: ① MySQL のデータベースをコピーする。 ・ DBのコピー(sqlファイルを出力)するには、mysqldumpを使うことを知った。 ・MAMP上の(phpmyadmin)のDBを操作するために、PHP上ではMy SQLコマンドのパス記述する必要がある事がわかった。パスを記述していないとローカル環境(PCにインストールされている)のMySQLを操作してしまう。 ・実行時間を指定し、自動で処理を実行するにはcronを使う事がわかった。(今回の課題では必要なし) ・dumpしたDBを別DB(テスト環境DB)にリストアするには以下のコマンドを使い事がわかった。 → mysql --user=$user_name --password=$password $database_name < $savePath; ・PHP上でコマンドを実行するときは、exec、systemを使う事がわかった。 ② archives , media , storage (本番環境で画像など更新されるもの)のディレクトリをコピーする ・ファイル、ディレクトリのコピーにはcopy, copy_dir関数を使用する事がわかった。 ・ディレクトリ内のディレクトリはコピーができないので、ディレクトリ内ディレクトリがあれば再帰処理をする処理を実装した。(read_dir,is_dir,rtim,open_dir,close_dir,copy,copy_dir等を使用した。) ・バックアップディレクトリにdate関数を用いて名前を付け、一日につき一つバックアップディレクトリが作成されるようにした。 ③3. MySQL の一部のレコードを修正する acms_blog の blog_domain フィールドをテスト環境のデータにする ・try、catchを利用したDB接続 ・UPDATEによるDBの指定カラム更新 →UPDATE table_name SET column_name = ‘data’ WHERE id = 1; 今回は指定テーブルの指定カラムを一括更新したいのでWHEREの条件なしで実行 →UPDATE table_name SET column_name = ‘data’ →table_nameテーブルの column_nameカラムが’data’に更新される。 ④Xserver上で運用できるようにする。 Xserverにsshログインをし、Xserver上で運用できるようPHPファイル内のMySQLコマンドのパスの変更をしました。 難しい作業ではないはずなのですが、Linux、Xserver、FTPなどの知識がない私は2、3日かかってしまいました。 最終的には、「ブラウザ上にボタンクリックで(POST送信)でバックアップを作成する事ができる」まで実装する事ができました。 その他: ”エラーを吐かせる”方法を知った。 (例)exec($command_restore, $output, $return_var); var_dump($output, $return_var); ◎成果報告&感想 一つの機能を実装するのに丸一ヶ月かかってしまいましたが、なんとか実際に運用できる形となり、「今後実際に使う。」とー道さん(代表)に言ってくださったのが何より嬉しかったです。また、今回の開発を通して、“自分は今まで、フレームワークを使ってパーツをくっつけるように開発をしていた“と実感しました。同時に、自分でプログラムを組んで、ものづくりをすることがより好きになることができました。 社員の皆さんは、本当に優しい方ばかりでした。 的外れな質問をたくさんする私にも、根気良くアドバイスをくださりました。 また社員の皆さんとのお昼休憩で、ITのことプログラムのこと、たまにガジェットのことなど、たくさんお話しができたことがとても楽しかったです。 一道さん、アップルプルの皆さん、一ヶ月間ありがとうございました。