このエントリーはフィヨルドブートキャンプ Part 2 Advent Calendar 2020の9日目の記事です。

プログラミングを始めるにはパソコンが必要ですがMacとかを用意するにはいきなり10万円以上のお金がかかってしまい敷居が高いです。そこで中古のパソコンとLinuxを使って1万円代で環境を用意しようというお話です。WebプログラマーはLinux知識が必須なのでこれを使えばLinux力養成(強制)ギプスとしても働くのでとてもいいです。

パソコン選び

おすすめはThinkPadの中古専門店 Be-Stockで中古のThinkPad X230を買うことです。

Image from Gyazo

大体14,000円ぐらいで売ってます。

Linuxをインストールするパソコンは安ければなんでもいいんですが、ThinkPadは中古市場に出物が多く安定して流通していること、Linuxをインストールして使う人が多いため情報が豊富なことがおすすめの理由です。

HDDをSSDに換装しているものも売っているのでそちらの方がお勧めです。画面解像度がFWXGA(1366x768)なのがネックですが50,000円ほど出せばFull HD(1920x1080)のモデルが買えます。

Image from Gyazo

僕も買ってみました。いやっほう!

SSDに換装されていて15,000円ぐらいでした。Linuxをインストールする場合、パソコンによってWiFiがすんなり動かないとかザラにあるんですが、さすがThinkPad X230はこなれているのでバッチリ動きました。(指紋認証も設定なしで動いたのはびっくり)

バックアップ

いきなりLinuxをインストールしてもいいんですが、もしもの時のためにバックアップを取っておきましょう。これがあれば何かあってもWindowsに戻して使えます。

下記はDVDを使っていますがUSBメモリーを使った方が便利です。16GB以上のUSBメモリーがあればOKです。僕はコンビニで16GBのUSBメモリー買ってきました。

ThinkPad X230 のリカバリーメディアの作り方を解説 | DESIGN.PC

Linuxのインストール

一番無難なUbuntuをインストールしましょう。

本家からよりも日本語の環境が整っているubuntu Japanese Teamから日本語Remixイメージ(拡張子が.isoのファイル)をダウンロードしましょう。

Ubuntu 20.04.1 LTSの方がサポート期間が長いバージョンなので安定していますが、デスクトップ用途なので最新のUbuntu 20.10の方がいいと思います。

これをインストールUSBにしてくれるソフトを使ってUSBに入れます。

上記のエントリーではRufusというソフトを使ってインストールUSBを作っていますが、僕はUNetbootinというソフトを使いました。まあどれも似たようなもんです。

Image from Gyazo

インストールUSBができたらそれを刺して起動しましょう。

パソコンが起動するとき、どこにOSが入っているのかHDDかな?DVDかなUSBかな?と順番に調べていっています。普通はUSBよりHDDの方を先に見にいく設定になっているのでHDDにインストールされているOS(この場合はWindows7)が起動してしまいます。USBから起動したいのでこの順番を変えましょう。こういった設定はBIOSでやります。

X230の場合は起動時のロゴが表示された時にF1を押すとBIOSの設定画面に入れます。

推奨するBIOSの入り方 (Boot Menu) - ThinkPad, ThinkCentre, ThinkStation - Lenovo Support US

Image from Gyazo

素っ気なくてちょっと怖い画面ですが、良く見れば難しいことは書いてありません。矢印の左右で一番上のタブを選択し、上下で選んでEnterで選択できます。

起動の順番はStartupタブのBootのところで設定できます。

Image from Gyazo

僕の設定はこうなっていました。

CDもFDD(フロッピーディスク)もないので4のHDDが選択されてそこからWindowsが起動しているようです。これより上にUSB HDDを持ってくればOKなはず。

Image from Gyazo

右側のHelpに書いてあるように-キーや+キーで順番を変えられたのでUSB HDDを上に持ってきました。そして画面下部に書いてあるようにF10キーで保存して終了。

するとubuntuのインストールイメージが起動するのでしばらく待ちます。

Image from Gyazo

インストーラーが立ち上がりました。インストーラーで聞かれる内容はWindowsやMacと大差ありません。

萌え萌えmoebuntu Ubuntu 20.10(Groovy Gorilla) のインストール手順

Image from Gyazo

インストールできした〜!やった〜!

Ubuntu 20.20はコードネームGroovy Gorillaなのでゴリラがマスコットみたいです。

ThinkPadのトラックポイント(赤いポッチ)やトラックパッドも問題なく動いています。WiFiも問題なし。SSDに換装されている影響か、画面の解像度の狭さ以外は結構快適です。

開発環境構築

プログラミングの勉強に必要なソフトをインストールしていきましょう。

Ubuntu Software

Image from Gyazo

Snap Store

Image from Gyazo

Ubuntu SoftwareがWindows StoreやMac App Storeみたいなもんです。Snap StoreがUbuntu Softwareにとって変わられる予定みたいですが今のところ過渡期のようです。Snap Storeはソフトが豊富です。

ターミナル

最初から 端末 という名前で入っています。

Image from Gyazo

ブラウザ

Firefoxが初めから入っています。Chrome好きはオープンソース版のChromiumを使うと良いです。

プログラミング用エディタ

迷ったらVisual Studio Codeでいいんじゃないでしょうか。

Image from Gyazo

チャット

SlackとDiscordがちゃんと動きますね。

Image from Gyazo

ruby & rails

さすがLinuxはプログラマー向けの各種ツールはバッチリ動きますね。railsもバッチリです。

Image from Gyazo

プログラミングを学習できるサイト

ハードとソフト、準備が揃ったらプログラミング学習をスタートしましょう。

ドットインストール

ドットインストール - 3分動画でマスターできるプログラミング学習サービス

無料で色々学べて便利。僕もいくつもやったことありますし、有料版を社員研修に使ったこともあります。

Progate

Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

プログラミングってどういうものだろう?と思っている方はこれをやってみるとわかると思います。Progateをやってみて「プログラミングって楽しい!」と思ったら他の方法も合わせて本気で取り組んでみるという流れは僕もお勧めです。

フィヨルドブートキャンプ

Image from Gyazo

FJORD BOOT CAMP(フィヨルドブートキャンプ)

はい、長々と書いてきたオチでございます。

「プログラミングって楽しい!」と思って本気でプログラマーとして就職を目指そうと思ったらぜひオンラインプログラミングスクールのフィヨルドブートキャンプへ。Linuxもカリキュラムできっちりやるのでubuntuにも最適です。

すでにフィヨルドブートキャンプで学ばれている方もLinux矯正ギプスを手に入れてLinux力をアップしてみてはいかがでしょうか!

Webプログラミング学習者にとってSessionという言葉は混乱を招きます。

特定の機能の名前であるSessionと英単語としてのSession(期間)がごっちゃになるからです。

経験者はコンテキストからどういう意味でSessionと言っているのかを判断しますが、学習者には区別がつきません。

人によって、初めてSessionという単語に出会う場面が違うため、Sessionの意味を聞いても自分が出会ったSessionとは違う意味を説明されたりします。一つ一つのわからない単語を調べていく真面目な人ほど混乱してます。

Sessionクラスというのがあったとして、誰でもそれだけでは何を意味してるのかわかりません。

英単語としてのSession

まずはSessionは英単語として 期間 という意味です。プログラミングの文脈では 一つの期間 ぐらいの意味で使います。この場合は特定の何かの機能を指しているわけじゃないので、別に仕様とかもありません。

HTTP Session

HTTPクライアントがRequestを送り、HTTPサーバーが処理を行った上でResponseを返す。この一連の処理をHTTP Sessionといいます。

これのことも単にSessionという場合があります。

WebアプリのSession機能

HTTPはステートレスなプロトコルなのでWebアプリは大抵何らかの状態を保持する機能を持っています。この機能のこともSessionといいます。

この機能はPHPの様に言語が持っている場合もありますが、基本的にはライブラリ・フレームワークがそれぞれ独自のものを持っています。(rubyだとrack)

このSession機能は内容の保存方法・場所を選べ、サーバーのファイルに保存したり、データベースに保存したり色々です。

特にこの保存場所がCookieであることがあるので、学習者の混乱は加速します😅

学習者としての覚え方

そのSessionが指しているのがHTTP SessionかWebアプリのSession機能なのかをまずコンテキストから判断しましょう。それ以外だったら大抵は英単語としてのSessionです。

プログラマーにとっては自明だけど一般の人には説明し辛いこの件について、名著「人月の神話」にしっかりと書かれています。

『なぜ、プログラミングは楽しいのか?』に対する素晴らしい答え - 涙目で仕事しないSE

RailsGirlsのメンターやプログラミングスクールを通して、プログラミングを始めようという人に向けてもっと端的にまとめられないかなと思い、まとめてみました。

プログラミングの楽しさ

  1. 自分の思い通りのモノを作る楽しさ
    (子供が砂場でお城を作る楽しさ)
  2. 人の役に立つモノを作る楽しさ
    (子供がパパのために粘土で鉛筆立てを作ってあげる楽しさ)
  3. ピタゴラスイッチを作る楽しさ
    (複雑なツールを組み合わせて大きな別のツールを作る楽しさ)
  4. 新しいものを学ぶ楽しさ
    (新型iPhoneより頻繁に生まれてくる最新ツールを追っかける楽しさ)
  5. もっとも柔軟な媒体でものを作る楽しさ
    (材料費無料、サイズほぼ無限、やり直しは一瞬の媒体を使ってモノを作る楽しさ)

プログラミングを始めた人に向けて

これらの楽しさの1つでも感じたのなら、ベテランプログラマーの感じている楽しさもあなたと同じです。あなた向いてるのかもしれませんね!

とりあえず日本の祝日のデータのyamlのみを含んだ holiday-jp/holiday_jp リポジトリを作りました。

https://github.com/holiday-jp/holiday_jp

従来のgemのreposは holiday-jp/holiday_jp-ruby になります。

holiday-jp/holiday_jp-ruby: Japanese holiday.

holiday_jp-rubyとかholiday_jp-phpとか作ってgit submoduleでyamlのrepoを取り込む感じで。

ログイン処理のコードレビューにおいて、認証部分が自作されていて、md5をつかっていたので、なぜ自作するのか?なぜmd5を使うのか?という点について議論になりました。

  • CodeIgniter-Ion-Authを使う
  • blowfishを使う(phpならpassword_hash関数、PASSWORD_BCRYPTオプションが良さそう)

僕は自前認証かつmd5を使う意味がわからなかったのでちょっと辛辣な表現になってしまいました。(その方が安全で楽なのに何故しないのか?的な)

ちょっと揉めてしまいまして、

「中途半端に(その実装を)採用しちゃったせいで、なんかあったら駒形さん直してくれんの?土日でも対応してくれんの?」

という感じになり、最終的には、

「レビューはあくまで"サジェスト"に留めて欲しい。」

ということになりました。コードレビューにおいて、

「ここはAAAではまずいのでBBBにすべきです。」

ではなく、

「ここはAAAよりよいBBBというやり方がありますよ。採用するかしないかは…アナタ次第です m9」

という感じですね。

https://gyazo.com/e00a80de33754a6f65c5a1c11ee15851

ホント レガシー改善は地獄だぜ

関連:レガシーPHP改善日記シリーズ

今日、案件が終了したのでお仕事を探しております。

二文字で表現すると無職です。😢

ここ数年のお仕事戦略の変遷

  1. rails案件がやりたい期
  2. iOS案件がやりたい期
  3. レガシーPHP改善期
    レガシーPHP改善日記シリーズ - komagataのブログ
  4. インターナショナルな案件やりたい期
    東京にいながらにしてインターナショナルな環境でプログラマー(Rubyist)として働くというお話 - 僕は発展途上技術者
  5. ペアプロ期
    ペアプログラミングのコツ - komagataのブログ
  6. リモート期

直近のお仕事

今日終わったお仕事も週3日でリモートでのお仕事でした。

フルリモートだと何やってるのかわからなくなりがちですが、毎朝ハングアウト朝会をやってたので生活リズムも崩れず、何やってるのかわからなくならずによかったです。

探したいお仕事

直近と同じようにリモートがいいなと思っています。

僕は自社オフィスに通ってお客様の作業を行いますが、自転車で30分という僕にとってベストな距離なのでとても快適です。普段自転車だと通勤ラッシュが余計に辛い…。

また、週2日は自社サービスに確保しているので週3日までがありがたいです。

得意な仕事とやりたい仕事

得意な仕事

やりたい仕事

  • golang(めちゃ速そうなので)
  • Swift(怖話iOS版を書き直してるので)
  • Android(怖版Android版に役立つ)
  • ReactなどのやったことないJSフレームワーク= Angular1.x、Vue、Backbone、Marionette、Knockout、Polymer以外(勉強になるので)
  • rails(自分にとっては楽なので)

もしお仕事ご存知の方がいらっしゃったらこのブログのコメント欄はつかいづらいので @komagata 等他の方法で連絡いただけるとありがたいです。 🙇🏻

7月15日追記:ご連絡くださった方々ありがとうございます。直近のお仕事は決まりました。今後別の機会があれば宜しくお願い致します。 🙇🏻

あるGithubのPRスレッドにて。

AAA merged.

komagata said:

@AAA レビュー無しのマージはまずいとおもいますー

AAA said:

@komagata ある程度、初めの形ができあがるまではレビュー無しで行きます。
そうしないと全く前に進まないので。

ある程度の二度手間が発生するのは承知してます。
一番最初から全員が完全に合意してい、100%ものを作成するのは不可能だと思います。
時間がかかり過ぎます。
話し合いでだけで延々と時間が過ぎていき、全員の考えが合致することは永遠にないと思います。

リファクタリングフェーズに入りましたら、レビューしながらソース改善していく予定です。

komagata said:

@AAA レビュー無しで行くというのはチームの皆さん合意の上の話ですか?

全員の合意は要らないですが、作った人以外の誰かが最低レビューするというのは一般的なやり方だと思いましたので。

CC @BBB

AAA said:

@komagaga 現在、チームは私とCCCさんの二人ですが、
CCCさんの了解はとっています。

今は進めて形にするのを優先したいです。

https://gyazo.com/cba99bde225ddc988300ba5bcc982f60

たざわ「あ〜!
コードレビューの火がきえた〜!!」

関連:レガシーPHP改善日記シリーズ

前回からだいぶ間が開いてしまいましたが進捗報告です。

Vagrant + Ansibleで開発環境作成

作りました。Windows・Macで自分のローカル上で開発できます。しかし、まだ皆さんこの環境上での開発に移行できていません。要トレーニングです。

Github利用

Github使えるようにしました。しかし前述のローカル開発環境に移行できないのでやっぱり以前のsvnでの開発が続いてしまっています。要布教・トレーニング。

自動テスト

phpunit + seleniumでテストのサンプルを作りました。しかし前述のローカル(略)

フレームワーク

次期フレームワーク選定を社内の小さなアプリ開発を通して行っています。Laravel5を試していますが良さ気です。ORM, Migration, gulp, scssとデフォルトでてんこ盛りなので最近の作法を覚えるのにちょうど良いのではないかと思います。

インフラ

現在はマネージドサーバーなのでLinuxを管理してないですが、パブリッククラウドに移行予定です。それには社内にLinuxが分かる人が(俺以外に)1人は必要なので採用を進めています。

感想

皆さん日々の業務の締め切りが当然あるので環境改善ばかりやってるわけにはいかず、なかなか進みません。gitへ移行したけど次の週にはsvnに戻ってたり。しかし少しづつですが確実に進歩しています。根気強く布教・メリット説明・トレーニングを続けていってレガシーPHP駆逐を目指します。

関連:レガシーPHP改善日記シリーズ

phpenv + php-buildよりphpbrewの方が良さそうです。(rbenvとぶつかる)

インストール

wgetはcomposerのインストールに必要。

$ brew install automake autoconf curl pcre re2c mhash libtool icu4c gettext jpeg libxml2 mcrypt gmp libevent wget
$ brew link icu4c --force

ふむふむ。

$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ sudo mv phpbrew /usr/bin/phpbrew
$ phpbrew init
$ echo "source ~/.phpbrew/bashrc" >> ~/.zshrc
$ phpbrew lookup-prefix homebrew
$ sudo phpbrew install -j `sysctl -n hw.ncpu` 5.6.8 +default+mysql+apxs2
$ phpbrew --version   
phpbrew - 1.18.5
cliframework core: 1.10.0
$ phpbrew switch php-5.6.8
$ php -v
PHP 5.6.8 (cli) (built: May 12 2015 17:33:22) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

composerとphpunitインストール。さりげ嬉しい。

$ phpbrew install-composer
$ phpbrew install-phpunit

レガシーがらみで気になったのでサポートに聞いてみた。

マネージドサーバーHDDプランの契約を検討しております。

PHPのバージョンが4.4, 5.2~5.4となっていますが、これはどの5系の場合はどのバージョンになるのでしょうか?

現在PHP公式では5.4未満はサポートが行われていません。 セキュリティパッチなどは御社が独自に提供していただけるのでしょうか。

以下、サポートからの返答。

この度は弊社サービスをご検討いただき、ありがとうございます。

PHPのバージョンは4.4、5.2~5.4の中から任意にお選びいただけます。特に お客様にて設定が行われなかった場合は5.4が適用されます。

セキュリティパッチについては弊社にて独自に作成し、対応を行っております。 ご安心ください。

ご不明な点やご質問等ございましたら、本メール返信にてお問い合わせ ください。

今後ともさくらインターネットをよろしくお願いいたします。

公式のサポートが切れているPHPのバージョンにもセキュリティパッチを当て続けている!?