shigechi-64's diary

自由・自主・自立・自尊

【Qiita】Laravel5.1におけるUserの論理削除機能の実装

恥ずかしながら初めてQiitaに投稿してみました。

qiita.com

やっぱりQiitaのほうがエンジニアの目につく確率が高いと思ったので、今後は技術的なトピックに関してはQiitaに投稿し、こちらにそのリンクを掲載するという形にしていこうと思っています。

GitHubを使ったひとりチーム開発のすすめ

個人でもチーム開発を意識しよう

個人開発でもGitやGitHubを使ってバージョン管理を行っている人は多いと思います。

その場合、masterブランチ以外にブランチを切らずに開発を続けても、自分ひとりなのでそんなに困ることもないかと思います。

が、実際の開発現場では一人だけで開発するということはまずないはずで、基本的には開発ブランチを切ったうえでプルリク、コードレビューを経てマージされるという手順を踏むと思います。

↑のような手順に慣れておいたほうが実際に現場に入った際にスムーズだろうと思い手順をまとめてみました。(Web上の情報を自分なりにまとめただけなのでこれが正しいかどうかはちょっとわかりません(^_^;)たぶんこんな感じだろうという推測も入っていますのでそのあたりはご容赦ください)

やり方

個人開発だとローカルにmasterブランチがあるはずなのでこの手順は不要かもしれません。なんにもないところから始める場合はこの手順でGitHub上のリポジトリをローカルにコピーしてきます。やり方は、GitHub上でClone or downloadボタンからURLをコピーし
f:id:shigechi-64:20180822202049p:plain
ローカルのターミナルで

git clone [URL]

とします。

  • 開発ブランチを作成

上述したような状況(ローカルにmasterブランチが既に存在する)の場合、それを複製して開発ブランチとして新たに作成します。

やり方は、masterブランチのルートディレクトリに移動して

git checkout -b dev

とします。(devという名前で開発ブランチを作成するとした場合)

  • 開発する

ゴリゴリ開発します。

  • ステージング、commit、push
git add .
git commit -m 'hoge'
git push origin dev

開発したリポジトリをリモートにpushします。このあたりはmasterブランチのみで開発していても同じだと思うので今回は省略します。

f:id:shigechi-64:20180822202348p:plain
f:id:shigechi-64:20180822202435p:plain
変更内容を的確に記述し、どのブランチからどのブランチへのpull requestなのかも確認しておくと良いでしょう。

これは実際にはそのリポジトリの管理者が行うものだと思いますが、今回はひとりチーム開発なのでmergeも自分でやります。
f:id:shigechi-64:20180822202607p:plain
これで無事に変更が取り込まれました。

  • ローカルのmasterブランチを最新に

リモートのoriginブランチは最新の状態になりましたが、ローカルのmasterブランチにはまだ今回の差分が取り込まれていません。
masterブランチに移動して、pullすると↑の変更が取り込まれた最新の状態にすることができます。

git checkout master
git pull
  • 不要になったローカルの開発ブランチを削除する

変更が取り込まれたあとの開発ブランチは必要がなければ削除します。

git branch --delete dev

とするか、もしくは

git branch -D dev

とするとmergeしたかどうかを問わずに強制的に削除します。

とても詳細な記事があった

これを書いている途中、Qiitaで
qiita.com
というエントリが注目を集めました。ものすごく詳細に書いてくださっているので、より詳しく知りたい方は一度参照してみることをおすすめいたします。
ブランチモデルに関する記述のところは特に私が知りたかったところだったので、とてもタイムリーなエントリでした^^

ポートフォリオサイトを作ってみた

Web上で名刺代わりに使おうと思い、ポートフォリオというか自己紹介サイトを作ってみました。

My portfolio -Shigeo "shigechi" Nakamoto-

就職とか転職活動をする際には履歴書と職務経歴書をほぼ必ず作ると思うのですが、そこまでかっちりはしていないけどなんとなくどんな人かわかる、みたいなのがWeb上にあったらなーと思って作りました。

自己紹介サイトってちょっと前に流行ったような気がしたので、そうした既存のサービスを探してみたのですが(about.meとか)今ひとつしっくり来るものがなかったので、まあ自分で作ったらいいかと思って作ってみました。

ちなみにGitHubアカウントを持っていて、自分でHTMLなりCSSを書くのが苦でなければGitHubPagesというのが便利です。GitHubPagesはGitHubアカウントをもっていれば誰でも使える、静的ページをホスティングするサービスです。↓こちらの記事を参考にさせていただきました。

【GitHubPages】GitHub.ioで自己紹介ページを作りました

とりあえずここを見てもらえば、そこからTwitterなりGitHubなりこのブログなりを見てもらえると思うので、例えば名刺などにURLをひとつ貼り付けておけばOKというのはけっこう便利かなと思います。

まだあんまり充実はしていないんですが、ここにいろいろ書いていけるようにがんばります!

レポート「Webエンジニアの教科書」

今日からソフトウェア開発者になった人に本気で勧める5冊 - @ledsun blog

↑こちらの記事に習って読んだ本のレポートを残そうと思います。

今回はこちらの本。

Webエンジニアの教科書

Webエンジニアの教科書

要約

Webサービスの開発に携わるエンジニアを「Webエンジニア」と定義し、非常に幅広いその技術領域の導入部分が一通り解説されています。

Ruby on RailsPHPでの開発、NoSQLデータベース、フロントエンド、Fluentdなどのログ集約ツール、データの可視化、VagrantやDockerなどによる環境構築の自動化などのトピックが網羅されています。

扱う領域が幅広い為、それぞれのトピックについてはそれほど突っ込んだ内容ではありませんが、Webエンジニアとして知っておく必要がある領域をさっと一回りして全体を掴むのには適した書籍ではないかと思います。

面白かった章とその理由

個人的には環境構築の自動化についての章が興味深かったです。

その理由としてはまず自動化の必要性が理解できたということです。新規サーバの追加、ライブラリやミドルウェアの導入、新しい技術の検証のための環境構築などは、個人開発のみを行っている場合はそれほど頻繁に行うものではないと思いますが、実際の現場ではそれなりに必要になってくると思います。その方法としてVagrantやDockerなどの仮想化技術やAnsibleのようなプロビジョニングツールの導入方法や使い方などが紹介されています。

導入自体はそれほど難しくはないので、実際にVagrantを使って仮想マシンを立ち上げてその中でRubyのプログラムを動かしてみたりしました。一度立ち上げてしまえば普通のサーバと同じように扱えるので、やったことがない人も一度試してみるといいかと思います。思った以上に簡単にまっさらなサーバができてしまいます。

こうした環境構築はプログラミングの勉強をしていくうえで躓きやすいポイントなので知識は必ず必要になってくると思いますが、理解してしまったあとは作業化するので自動化してしまうのが望ましいのだろうと思いました。

理解できなかった章とその理由

理解できなかったというか、理解はできたけどピンとこなかった章はGoogle Chartなどを使ったデータの可視化の章です。

これは技術というよりも、どちらかというとビジネスサイドに近い部分でサービスの質を高めていく為の方法論かなと思います。
必要性は理解できるし、そのやり方が書いてあるのは有用ではありましたが、今現在サンプルデータをとって解析しなければならないほどのサービスを自身でもっておらず、そうしたサービスを展開している会社に勤めているわけでもないのでいまひとつピンとこなかったというのが正直なところでした。

が、Webサービスを展開してそれを改善していくには必須の要素なので抑えておく必要はあるとは思いました。

仕事に活かせそうな知識、活かせそうな状況と活かし方

まだ仕事をしていないのであまり偉そうには書けないのですが(^_^;)

Chapter6のログについての章は、実際の現場で必ず必要になってくる知識なのかなと思いました。↑のデータの可視化と同じで、個人開発しかしていない今の自分にはそこまで必要ではないのですが、実際にWebサービスを運用する側になった場合には絶対に避けて通れない部分だと思います。

ログの解析が有効となるケースとしては、本文にも記述がありますが

  • バグの調査
  • 不穏な兆候の検知
  • 仮設に対する検証
  • 監査ログ

などがあるでしょう。それぞれの場合において、ログをきちんと解析できれば有用な情報を得られるかと思います。

この本ではログ集約ツールとしてFluentdが紹介されていますが、私個人としてはそもそもApacheやNginxのログの見方をちゃんと知らないので、まずはそこから勉強しないとな・・・と思いました。

N予備校で学んでいる

最近、N予備校で学生時代の勉強をやり直しています。

N予備校では中学・高校で習うことがだいたい網羅されている印象ですが、コンピュータサイエンス系の授業もかなり充実しています。

もともとはそのコンピュータサイエンス系の講義をを受講しようと思っていたのですが、中学・高校の科目内容を眺めているうちにそれらをやり直したい気持ちがふつふつと湧いてきて、先にそちらから受講することにしました。

今は中学の授業を8割くらい終えたところです。(中学といってもなかなか侮れません。数学などは本質的な理解をしていなかったことも多いので、大人の理解力をもったうえでやり直すことには意義があると感じました)

中学を終えたら高校の内容に入っていきたいのですが、全教科やっているとかなりの分量になるので数学を中心に復習していこうと思っています。(中学は国・数・英の3科目のみだったので全て受講しました)

Web系エンジニア界隈では機械学習の盛り上がりに伴い、数学を学び直す必要性を感じている人が増えているように思いますが、高校レベルの数学の学び直しにはN予備校は最適なのではないかと思います。

ちなみに無料で受講できる範囲はごく一部なので、本格的に学習しようと思うと月額の課金が必要になります。が、月に1000円程度なのでそこまで負担にはならない金額ではあります。

時間ができたら世界史とか物理とかもやってみたいのですが、数学の学び直しが主目的なので他の科目に充てる時間がとれるかどうかは微妙かなと感じています。他にも学ぶべきことはたくさんあるので・・・(大学の授業も並行で受けないといけないし)

時間をうまくやりくりして優先順位を意識していくようにしたいと思います。

www.nnn.ed.nico

Laravel Collectiveのlink_to系から生成されるリンク文字列にBootstrapのglyphiconを挿入できるかどうかで悩んだ

結論

たぶんできないっぽいです。aタグはviewに直接書いてしまい、URL部分にrouteを使う方法を採りましたが他にやり方はあるかもしれません。

そもそもLaravel Collectiveって何

本題に入る前に気になったので。Laravelで使用できる外部ライブラリってのは判るのですが、何を目的に存在しているのか気になったので公式をあたってみました。

laravelcollective.com

「私たちはLaravelフレームワークのコアから削除されてしまったコンポーネント群をメンテナンスしています。あなたの愛する、素晴らしいLaravelの機能を使い続けることができるのです」

なるほど、そういう目的だったのですね。単にHTMLの生成をヘルプしてくれるライブラリだと思ってました。Laravel Collectiveの一面としてそういう機能も持っている、ということですね。

何がしたいか?

下記のようにテキストとBootstrapのglyphiconを含んだリンクを生成したい。

<a href="https://foo/user/id"><span class="glyphicon glyphicon-home"></span> マイページ</a>

見た目はこんな感じです。
f:id:shigechi-64:20180301114417p:plain

link_to系を使うとspanタグを入れられない

link_to系はいくつか存在します。htmlリンクを生成するという点では同じだけど、生成の仕方がいくつかの方法から選べる、ということのようです。状況に応じて便利なほうを使ってね、ということでしょうか。

https://laravelcollective.com/docs/5.0/html#generating-urls

で、共通してリンクの文字列は第2引数で指定するんですが、ここにspanタグを入れてもエスケープされてしまうのでうまくglyphiconが表示されません。いろいろ試したけどだめだった。もし方法があれば誰か教えてください。

routeを使う

しょうがないので下記のように書きました。

<li><a href="{{ route('users.show', ['id' => Auth::user()->id]) }}"><span class="glyphicon glyphicon-home"></span> マイページ</a></li>

aタグは直接書いてしまいます。URL部分にrouteを使うだけ。

リンク文字列の前にglyphicon入れたいっていう場面はけっこうあると思うんですが、そういう場合link_to系は使えないってことなんですかね?わかりません。とりあえず↑のやり方でやってみました。

参考

Laravel Collectiveでのhtml生成については以下の記事でよくまとめられています。

blog.motikan2010.com

paizaのスキルチェックで使える標準入力取得用コード(PHP)

入力が1行の場合と複数行の場合があるのでそれぞれ掲載してみる。

paiza_get_oneline.php

<?php

//1行入力
$single_line_input = trim(fgets(STDIN));
//不要な改行コードを取り除く
$single_line_input = str_replace(array("\r\n","\r","\n"), '', $single_line_input);
//スペースで分解して配列に格納
$array = explode(" ", $single_line_input);

取得したい値がひとつだけで、配列に格納する必要がない場合もあるのでそのあたりは臨機応変に。

paiza_get_multiline.php

<?php

//1行入力、スペースで分解して配列に格納
$first_line_input = trim(fgets(STDIN));
$first_line_input = str_replace(array("\r\n","\r","\n"), '', $first_line_input);
$array_first_line = explode(" ", $first_line_input);

//続く入力を格納する配列
$array_below_lines = [];

// 指定の回数だけループ
for ( $i = 0; $i < $array_first_line[0]; $i++) {
    $below_line = trim(fgets(STDIN));
    $below_line = str_replace(array("\r\n","\r","\n"), '', $below_line);
    $below_line = explode(" ", $below_line);
    array_push($array_below_lines, $below_line);
}

1行目で取得した入力(配列)の[0]番目分だけループを回してそれ以下の入力を取得するパターン。
これも問題によって微妙に変える必要はありますが、入力されるデータの個数を指定する箇所が必ずあるのでその分だけループを回せばOKかと思います。

だいたいこの2パターンのどちらか、もしくは組み合わせでいけると思います。