てことで、転職します
えー私、18年ほどやっていた業種ともおさらばし、新たな業界に飛び込む事を決意しました。
正直、給料死ぬほど安くなったけど楽しみで仕方ない。
嫁とも話をして、理解をしてくれた。
今のまま同じ仕事をしていたら多分困ることはないと思うけど、面白くない。
私のわがままを理解してくれた嫁には本当に感謝しかない。
でもしっかりSweet10Diamondはせがまれたので買ってあげられるように精進しないと。
さて、私の飛び込む業界は悪名高きSES業界です。
しかし、社風が面白そうだったし、何よりこんなおっさんを快く受け入れて頂けたのは感謝です。
とにかく私は現場での経験を積みたい。そうすれば今後も何かと楽になっていくはずです。
ここを足掛かりに頑張ります。あ、踏み台にするつもりはないんですけどね。
SESで疲弊して別業界に転職した人のブログとかめっちゃ読み漁ったので、少し怖い部分もあります。
ちゃんとやりたい現場にアサインされなかったら地獄だなと。
どうなるかは分からないけどただ頑張るだけですね。
10月から開始予定で、4ヶ月間は研修だそうです。
Javaを勉強するそうなので、早速Javaの予習をProgateで開始しています。
Laravelも頑張りたいけど、しばらく厳しいかな?
てか、Javaって記述の仕方が若干PHPに似てる気がする。
PHPやっておいて良かったなと。やっぱり無駄なことなんて何一つないんだなと。
でもメソッドの戻り値のデータ型をいちいち指定しないといけないのはダルい。
変数にもデータ型を指定するのもまだ慣れない。
なんでJavaが大規模開発に向いているのか謎だらけどだけど、頑張ろう。
いやほんとブログのタイトル変えようかな...
全くpython要素がない。
着々とデプロイは進んでいるが、やはり地獄
デプロイというより、環境構築でめっちゃ躓いた。
Linuxはコマンドとかそうゆうのは大分理解したんだけど、いまいちリポジトリの概念が理解出来ていない事が判明。
PHPをインストールするのにRemiというリポジトリからインストールを行ったんだけど、php-mbstring
というのがインストール出来ていなかったようでこいつのせいで地獄みた。
単純にyum -y install php-mbstring
みたいにするとphp-common
と干渉してるエラーを吐く。
でもphp-common
はちゃんとインストール済み。
何でだよ!とイライラすること1時間。
ドンピシャなページを発見。
これ通りやったら無事にphp-mbstring
をインストール出来た。
このリポジトリの概念がいまいちよくわからん...
こうゆうのをもっとちゃんと理解出来れば余計な所で躓かないんだけどなー。
やっぱりDockerが良いのかなー。
とりあえず後はrootフォルダに乗っければ公開出来るっぽい。
その前にちょこちょこ設定する必要はありそうだけど。
httpsにもしたいけど、すぐには難しそう。
覚える事が尽きない。
【PHP】array_count_values関数
月別アーカイブを作ってる時にこの関数めっちゃ便利だったのでご紹介。
配列の値をキーとして、値の個数をカウントして連想配列にしてくれる関数です。
PHP: array_count_values - Manual
月別アーカイブを作成時、一度すべての記事作成日時をcreated_atカラムから取り出し配列に入れたのですが、ここから重複を省いてカウントする方法ないかなーと探していたらドンピシャこの関数がありました。
private function archive() { // 月別アーカイブ処理 $posts = Post::all(); // DBから全ファイル取得 $monthList = []; // 空リスト作成 // ループで空リストに追加 foreach($posts as $post) { $monthList[] = $post->created_at->format("Y-m"); } // array_count_valuesを使って連想配列化 $countArray = array_count_values($monthList); return $countArray; }
あとはビュー側で中身を取り出して表示さればOKですね。
てかこれ書いてて思ったのですが、ループさせなくてもモデルの操作で日付のデータを配列で取得出来たような…
ちょっと後でやってみようかな。
array_count_valuesはいろんな場面で使えそうなので覚えておいて損はなさそうです。
30代後半のおっさんがエンジニアを目指すのは無謀なのか?
さて、ちょっと自分語りさせて頂きます。
長いので興味のない方は読むだけ時間の無駄です 笑
デプロイの前に
なんかページネーションを実装するのにLaravelだとデフォルトでBootstrapでデザインが作られてるようです。
しばらく気づかなかったのですが、フォントの感じが変に感じまして、よく見たら色々微妙におかしくなっていました。
仕方ないのでBootstrapのCSSを切って修正しました。
ついでに月別アーカイブのリンクを作って該当月の記事だけを抽出するアクションを作ろうとやってみたのですが、これが思いの他苦戦しました。
Railsにはall_monthメソッドという便利メソッドがあって簡単に実装できました。
詳しくはこの辺をみると良いと思います。
Laravelにもあるだろうと思っていたのですが、どうやら同じような物はないらしい…
ただ、年、月を整数で渡すと該当するデータを引っ張ってくる関数がありました。
ちょっとごちゃっとしたけどこいつを使ってなんとか実装出来ました。
たぶんこの辺が参考になると思います。
日付で検索することは割とあるような気がするので覚えておいて損はないですね。
わからない事だらけだけど、調べながら徐々に進んでいく感じはゲームを攻略している感覚に似ています。
イライラすることも多々あるけど、少しづつ力がついてきてるなーと実感してます。
てことで、デプロイ調査開始。
おっしゃほぼ完成した!
相変わらずコメント機能がなかったり、一部リンクを実装してなかったりはしますが概ね完成でしょう。
認証機能がどうなるか心配だったけど、割と簡単に出来て良かった。
もちろんめっちゃ調べたけど。
コーディング2割、調べてる時間8割くらいある気がする。
さて、これからデプロイという山を登らないといけないと思うとそれだけで心折れそうだけど頑張ろう...
また心が折れてしまったら...もう立ち直れないかもしれない...
いや、Djangoでもう一回挑戦する手もあるか...
いやいや、何としても今回はやり遂げたい。
webサーバーはApatchでDBは最近割と仲が良いmysqlを使おう。
てか、思ったんだけどプログラマーのポートフォリオってローカル環境で出来てれば良い説ある?なんかgithubとかに公開しておけば良いっぽいんだけど、どうゆう事なの。
私はデプロイして公開する事でポートフォリオになるのかと思ってたんけど。
わざわざLinux覚えるためにVPSまで借りてコマンドだったり初期設定だったり勉強したんだけどなぁ...
無駄にはならないと思うけど、すんごい遠回りした感はある。
次はスクレイピングを使った簡単なサイト作りたい。
デプロイ頑張る。
共通処理を普通に関数でまとめた
さて、昨日記事にした内容なのですが、とりあえず関数でまとめました。
修正前の月別アーカイブとコントローラーはこんな感じでした。
// namespaceとかは省略。ファンクションから public function index() { $posts = Post::latest()->get(); // 最新記事5件 $five = Post::latest()->take(5)->get(); // 月別アーカイブ処理 $posts = Post::all(); $monthList = []; foreach($posts as $post) { $monthList[] = $post->created_at->format("Y-m"); } $countArray = array_count_values($monthList); return view("posts.index", compact("posts", "five", "countArray")); } public function show($post) { $post = Post::find($post); // 最新記事5件 $five = Post::latest()->take(5)->get(); // 月別アーカイブ処理 $posts = Post::all(); $monthList = []; foreach($posts as $post) { $monthList[] = $post->created_at->format("Y-m"); } $countArray = array_count_values($monthList); return view("posts.show", compact("post", "five", "countArray")); }
月別アーカイブの処理をindexアクションとshowアクションで同じ記述をしています。
これを一つにまとめたい。まとめて簡単にオンオフみたいなので処理を流したい。
そんな機能はないだろうか?と思って探してみたのですが、ありませんでした。
なので普通にそれ用の関数作って呼び出す事にしました。
private function archive() { // 月別アーカイブ処理 $posts = Post::all(); $monthList = []; foreach($posts as $post) { $monthList[] = $post->created_at->format("Y-m"); } $countArray = array_count_values($monthList); return $countArray; } public function index() { $posts = Post::latest()->get(); // 最新記事5件 $five = Post::latest()->take(5)->get(); // 月別アーカイブ呼び出し $archive = $this->archive(); return view("posts.index", compact("posts", "five", "archive")); } public function show($post) { $post = Post::find($post); // 最新記事5件 $five = Post::latest()->take(5)->get(); // 月別アーカイブ呼び出し $archive = $this->archive(); return view("posts.show", compact("post", "five", "archive")); }
viewに渡す変数名が最初と変わってるので読みづらいかもしれません。
変数名つけるのほんと苦手...
とまぁこんな感じで一応スッキリはしたのですが、それでもやっぱり同じ処理をアクション毎に書くのってスマートじゃない気がするんだけど、これはしょうがないのかな?
最新5件表示の処理に関してもやっぱりその都度書かないとならないし。
railsのbefore_actionって処理を作ったらその処理をどのアクションで適用するか設定出来た気がするんだけど、記憶違いかな?
そんな機能があったらもっとスッキリするんだけどなぁ。
まぁこの辺は今後のブラッシュアップの課題としますか。
さて、残る機能はログイン、編集、削除、ページネーションですか。
Laravelはどうしても調べる時間が長くなっちゃって中々進まないなー。
あ、そう言えば月別アーカイブ作ってる時に出会っためっちゃ便利な関数array_count_values
を今度紹介しよう。そうしよう。