久しぶりの更新になりました。ちょっと更新が途絶えていたのはこの1週間強くらいに渡り「チャットスペースの実装」という結構重ためのカリキュラムをやっていたためでした。
テックエキスパートでは大きく「基礎カリキュラム」「応用カリキュラム」「個人アプリ」「最終課題」といった具合にカリキュラムが分かれるのですが、このチャットスペースの実装で応用カリキュラムは修了です。(カリキュラムの内容については下記の記事に書いています!)
やってること自体はそこまで難易度の高いものではないと思うのですが、やはり自分で実装するとなるとエラーが大量に出て時間だけを喰ってしまうということが往々にしてあるので、結局皆さんここでつまづくという感じです。
で、注意しなければならないのが、このチャットスペースの実装にかかる時間とカリキュラムで割り当てられている時間に大きな乖離があるということ。
というのも、このチャットスペース実装はカリキュラムの進捗表では、1つあたり5時間とか7時間で終えるものとしてカリキュラムが組まれていますが、実際には1つあたり2日弱くらいの時間がかかったりします。
つまり何が言いたいかというと、このチャットスペース実装までに十分な余裕を持ってカリキュラムを進めておかないと間に合わなくなる可能性があるということです。
この辺は相変わらず酷いので、やはりなるべく早くカリキュラムを終わらせることが重要になってきます。
で、そんなこんなでようやく最後の課題「個人アプリの開発」と「最終課題(チーム開発)」以外の応用カリキュラムは全て終わりましたので、ここで所感をまとめておこうかと思います。
テックエキスパートに約1ヶ月通って思うメリット・デメリット
それではちょうどテックエキスパートに通い始めて約1ヶ月、応用カリキュラムも全て終えましたので現時点での所感をメリットデメリットという形で率直にお伝えしたいなと思います。
テックエキスパートの良い点・メリット
個人的に、テックエキスパート「素晴らしい」「ここは案外よかったな」と思うのは下記の4点です。
・同期入校組がいい刺激になる
・チーム制というのが地味に良い
・教室が割とゆったり使える
・ちゃんと転職支援もしている
同期入校組がいい刺激になる
個人的にはこれが最も良い点かなと思っています。
テックエキスパートは、受講開始のタイミングが月2回の決まった日になっていて、同じタイミングで受講開始する人たちがいわゆる「同期」になります。(私で言うと57期)
そうすると、基本的に同じカリキュラムを進めていくことになるので、同期の人が頑張っているから自分も頑張らなくちゃな、とモチベーションの維持につながります。
また同時に、何かにつまづいて「自分はプログラマーに向いていないのかな」と思う時も、同期の方が同じ箇所でつまづいていたりして「あ、自分だけじゃないんだ」と安心できたりもします。
そういった「モチベーションの維持ができる」というのは、テックエキスパートならではですのでかなり良い点かなと思います。
また、同期入校の方とは何かと話したりする場面も多いのですが、様々なバックグラウンドを持った方がいて非常に面白いです。
会社に勤めていたら出会うことがなかったような方と接することもできたりするので、そういった意味でも「オフラインのプログラミングスクールならではの良さ」というのがあると思います。
チーム制というのが地味に良い
テックエキスパートに入校すると、同期の中で4人ずつくらいのチームに便宜上分けられます。
チームといってもカリキュラムを進めていくのはあくまで個人単位なので、そこまでチームで何かするというのはないのですが、人間面白いもので「チーム」と言われると何故か仲間意識を持って、みんな仲良くなってきます。
そうすると、カリキュラムの悩みやキャリアの悩みなど様々なことを共有するようになって、結果的に「モチベーションの維持」や「精神的な安定」につながってくるのです。
私は元来一匹オオカミなタイプの人間なので、正直初日は「面倒くせえな」と思っていたのですが、今振り返ると「チーム制がなかったら結構精神的にきつかったかも」と思うほど助けられていますので、非常に重要なポイントかなと思います。
教室が割とゆったり使える
テックエキスパートは最近かなり人気が高いようで、受講生も増えてきているのですが、教室の数も合わせて増やしているので教室をゆったり使うことが可能です。
例えば渋谷校であれば「フォンティス」「アジアビル」「フレーム」という3つの拠点があり、基本的に自由にどこでも使っていいので気分によって場所を変えられますし、3拠点あるので比較的空いています。
土日は多少混んでいますが、それでも隣の席も埋まるほど混んでいるという状況は滅多にないので、結構快適に学習することができて個人的には満足しています。
また座席も普通の席だけではなく、ソファー席のような場所やハイチェアのテーブル、座敷のような場所もあったりしますので気分転換も可能で、学習環境は結構良いのではないかなと思っています。
ちゃんと転職支援もしている
テックエキスパートって高いだけで何もしてないんじゃないの?と思う方もいるかもしれませんが、「転職支援」に関しても意外としっかり頑張っていることを知り、見直しました。
「転職支援」というと履歴書の書き方や、面接対策というのが一般的ですが、私が「おっ、意外とちゃんとやってんじゃん」と思ったのは全く別のことです。
では何を見て「転職支援やってる」と思ったのかと言うと、それは雇用先企業へのアプローチです。
これは偶然気づいたのですが、今日ある部屋からこんな電話の内容が聞こえてきました。
「○○株式会社様でしょうか。テックエキスパートです。求人票を見てご連絡させていただいたのですが、御社のエンジニア求人は未経験でも受け入れ可能でしょうか〜云々」
つまり、テックエキスパートが世の中にエンジニアの求人を出している会社にテレアポを行なって「未経験でも雇用の可能性があるのか」というのを確認していたのです。
エンジニアというのはどんな職業よりも「経験者」が有利な業界ですので「未経験」というのは非常にハードルが高いです。
そんな中で、スクールとして企業にしっかりとアプローチをかけているという事実は個人的には非常に好感を持ちました。
実際に転職支援がどれほど強力なのか現時点では分かりませんが、それなりに期待できるのはないかな?と思っています。
テックエキスパートの悪い点・デメリット
そしてもちろんテックエキスパートの悪い点も多分にありますのでここで赤裸々にお伝えしておこうと思います。(あくまで個人の感想ですので悪しからず、、)
・メンターの質・対応が様々
・カリキュラムが雑
・朝礼・夕礼が面倒なのと時間がもったいない
・ドリンクくらいタダで提供しろ
メンターの質・対応が様々
テックエキスパートでは基礎カリキュラムと応用カリキュラムではメンター(講師)が変わります。また質問方法も、オフラインからオンラインへと変わります。
なぜ変わるのか?理由は定かではありませんが、守備範囲が広がるので同じ基礎メインのメンターさんだと厳しいということではないかと思います。
で、その応用カリキュラムのメンターさんに関して不満を持っている人が多いように感じています。
理由としては以下のような理由で応用カリキュラムのメンターに不満を持っている。
・他のメンターに質問した事との連携が取れていない
・態度が横柄
・冷たい
・そもそも的確な課題解決ができない
・メンターによってできる人とできない人がいる
おおよそこんな感じでしょうか。これは私もかなり納得する事は多いなと思っています。
特に何か分からないなどはオンラインで質問するのですが、その場合オンラインで電話をつなぐ度に担当メンターが変わります。
この担当メンターにその前のメンターと会話した内容が引き継がれていれば良いのですが、その引き継ぎが全くもって為されていないので、二度手間になりかなりの無駄な時間と労力を使うことになってしまうのです。
またメンターによって対応の質も様々で、良い人に当たれば気持ちよく進められますが、感じの悪い人に当たればストレスが溜まってしまいます。
カリキュラムが雑
これはもう何回も言っていますが、カリキュラムが非常に雑です。特に応用カリキュラムではその雑さが顕著にに感じられました。笑
どういう雑さかというと、カリキュラム通りに進めるとエラーが出るのにも関わらず、その箇所を修正していなかったり、そもそも指示が曖昧で、それがエラー発生の温床になっていたりするといった雑さです。
カリキュラムのボリュームもかなりあるので仕方がないかもしれませんが、その辺でストレスが溜まってしまうのはよくないかなと思います。
朝礼・夕礼が面倒なのと時間がもったいない
テックエキスパートでは朝の11時と夕方の18時にそれぞれ朝礼・夕礼を行います。内容としては瞑想をしたり1日の目標を書いて発表しあったりということを行います。
で、だいたいこれに20分前後かかります。
正直夕礼はまだいいとして、朝の集中できる時間帯に20分以上時間を取られるとかなり集中が削がれてしまうので、個人的にはこれはあまり強制しないでほしいなと思っています。
学習を始めたばかりの基礎カリキュラムの間であれば、新しい人と知り合うとか・他の人のアドバイスなどを聞けるといった利点がありますが、応用に進んでからはあまり意味がないように感じています。
ドリンクくらいタダで提供しろ
テックエキスパートの受講料は約60万円。非常に高いですよね。でもそれなのに、教室内のドリンクなどは無料では一切提供しておらず、自動販売機など全てお金がかかります。
別に大した金額ではないので、憤慨するほど不満ではないのですが、60万円払ったスクールで、小銭も取られるのか、と思うと結構サービス的にケチだな〜と思ってしまうのです。笑
悪い点もあるけど総じて言えば満足
ということで上記に挙げたようにテックエキスパートには悪い点もありますが、総じて言えば満足かなというのが現時点での感想です。(ちょうど始めて一ヶ月くらいですね)
特に、目的の本質である「プログラミングスキルを身に付ける」という点においては、なんだかんだ網羅的に知識を学び、それをアウトプットするというサイクルが上手くできているのではないかな?と思っています。
もちろん他のスクールに通ったことはないので、客観的な比較はできないのですが、総じて言えば満足していますし、未経験からエンジニアになれる可能性を生み出してくれるだけの力はありそうだなと思っています。
備忘録
それではここからは備忘録です。色々と新しい課題が出てきたのでややこいですが、AWSとかも出てきて楽しいですね。
WEB APIってなんだ?
課題の中でWEB APIを実装せよというのが出てきたので、WEB APIというのが何なのか?を書いておきたいと思います。
これに関しては様々な記事を検索してみたのですが、下記の記述が最もしッくりきました。
広義にはHTTPプロトコルを用いてネットワーク越しに呼び出すアプリケーション間、システム間のインターフェースのこと。引用:https://qiita.com/NagaokaKenichi/items/df4c8455ab527aeacf02
WEB APIというと、外部から使えるようにするものとか何とか色々言われていますが、根本的な話をするとこのことかと思います。
httpプロトコルを使って、外のものでも中のものでもいいけどとりあえずネットワーク越しに何らかのものを呼び出すインターフェイスの事です。
apiというと外から持ってくるイメージですが、別にそれは自分の中でもよくて、とにかくhttpプロトコルを使って持ってくるのをapiと覚えておくと勘違いはなさそうです。
実装方法は?
実装方法については色々あるようなのですが、下記の記事が参考になりました。
参考記事;Rails5で超簡単API
カリキュラム上ではまた別のやり方だったので備忘録程度にきさいしておきます。
・コントローラーにapiディレクトリ作成
・api用のコントローラー作成
・名前空間(namespace)をつけて同名の他のコントローラーと差異化
・route,rbにルーティングを追加※コントローラー直下にapiディレクトリを作ったのでルートでネストさせる。さらにネームスペース用の記述をする(下記)
namespace :api do
resources :
end
・
正規表現ではエスケープが必要な文字が多数あるので注意
検索窓などを設置する際や特定のディレクトリ以下のページを指定したりする時に正規表現を使うと思いますが、エスケープが必要な文字が多数あるので注意が必要。
エスケープというのは「\」のようにバックスラッシュを使って、この後のやつは特別な文字じゃないよ的なことをするやつですね。
これに関しては正規表現:エスケープが必要な文字、まとめに詳しく載っていたので参考に。特に「デミリタと同じ文字」に関しては初耳だったので要注意。
カスタムデータ属性
HTML5で新たに追加された機能にカスタムデータ属性というのがあります。要素の中で、data-で始まる属性はすべてデータ属性となり、idとかクラスの指定をせずにDOMEを特定できるので非常に便利。
カスタムデータ属性を使って$(‘セレクタ”).data(‘カスタムデータ属性の名前’)でデータを取得することもできる。
参考記事;いまさら聞けない、HTML5カスタムデータ属性の基本と使いどころ
parentメソッド
忘れがちなのですが、parent属性を使うとセレクタで指定したDOMEの親要素を指定することができます。
javascriptなどで、後から子要素を追加したり消したりする時に有効に使えますね。
参考記事:【jQuery入門】parent(), parent(), closestで親要素を取得する方法!
setintervalで特定の処理を一定間隔で繰り返す
javascriptでsetintervalを使うと特定の処理を一定間隔で繰り返すことができる。例えば新しいデータがないか5秒ごとに見るみたいなこともできる。(サーバーに負担かかりそうなので、実際別のやり方してそうですが)
参考記事:JavaScriptでsetIntervalを使う方法【初心者向け】
三項演算子でスマートに
三項演算子は、javascriptでif文を超簡単に書けるやつみたいなものです。下記のように書くことで、trueなら左側の処理、falseなら右側の処理をさせることができる。
var name = user == current_user? user.name : no_name
参考記事:三項演算子の適切な使い方(条件演算子)
animateメソッドで動きをつける!
javascriptでanimate処理をすれば簡単に動きをつけることも可能。書き方は下記で、これにスクロールとかを使えば画面をスクロールさせることもできる。
$(function() {
$(‘動かす要素名’).animate({
‘動かすアニメーション名’: ‘動かす距離’
});
});
参考記事:animateメソッドを使ってjQueryでアニメーションを実装する方法
webサーバーとDBサーバー
一口にサーバーといっても大きく分けてWEBサーバと DBサーバーがあります。それぞれがどんなものかは、簡単に言うとWEBサーバーはレスポンスを入れておくサーバーで、DBサーバーはデータを入れておくサーバーです。
で、これらは本当は1個にまとめていてもいいのですがほとんどの場合別に建てられています。
理由はいくつかあるのですが、サーバーの負荷を減らすことに加えセキュリティの面も大きいようです。
DNSってなんだっけ?切り替えって?
よくWEB系の仕事をしているとDNSの切り替えみたいな話にぶつかる時があるのですが、ちょっとこれを整理しておこうと思います。
で、簡単に言うとDNSの切り替えというのはドメインの指す情報(DNS)を別のもにに書き換えるということです。
DNSというのは(Domain Name System)の事で、「00.000.000.000」みたいになっている文字列に覚えやすいように文字列(shingeki-riman.comみたいな)を与えているのですが、それをするのがDNSなのです。
なのでDNSの切り替えというのはDomain Name を変えるみたいなイメージで良きです。
Linuxコマンド色々
サーバーを操作したりする時に使う?Linux言語が色々出てきたので備忘録
digコマンド
digコマンドはDNSサーバーに問い合わせをしてドメインからIPアドレスを取得するコマンド。
参考記事:奥が深いDNSサーバーとdigコマンド
talentコマンド
これは離れたところにあるサーバーやネットワークを遠隔操作する時に使うもの。
参考記事;https://www.infraexpert.com/study/tcpip19.html
Linuxディストリビューション
とりあえず大変な初期設定を色々やってくれているパッケージみたいなものらしい。これを使わずに0からlinuxを使うのはやばいらしいです。
で、このディスとリニューションはいくつか有名なものがあるらしく「CentOS」や「Ubuntu」といったものが有名らしいです。
パッケージマネージャ
これはコンミュータに何のソフトウェアがインストールされたか記録したり更新したりすることを容易にするものらしいです。
先ほどのCentOSやAWSのAmazon Linuxではyumというコマンドを使います。
参考記事:【パッケージ管理システムとは?】Linuxでのパッケージ管理の使い方まとめました
参考記事;【初心者でもわかる】yumコマンドの使い方とリポジトリの追加方法
cpコマンド
copyコマンドのこと。ファイルをコピーする。
参考記事:ファイルやディレクトリをコピーするcpコマンドの使い方!【Linuxコマンド集】
mvコマンド/rmコマンド
mvはムーブコマンドのこと。rmはリムーブコマンドの事。
参考記事:【Linuxでの移動】オプション含めて紹介!mvコマンドの詳細まとめ
mkdirコマンド
make directoryコマンドの事。
参考記事:ディレクトリを作成する!mkdirコマンドの詳しいまとめ【Linuxコマンド集】
touchコマンド
指定したファイルが存在しない場合に新規作成してくれるコマンド。
参考記事;touchコマンドについて詳しくまとめました 【Linuxコマンド集】
catコマンド
ファイルの内容をくっつけて表示するコマンド。
参考記事:【Linuxコマンド集】3分でわかるcat コマンドの使い方
tailコマンド
ファイルの終わり部分を表示するコマンド。エラーログなどは終わりに書かれるのでエラー文などを確認する時に有効。※下記fは新たにエラーログが追加されるたびに表示するコマンド。
$ tail -f error.log
参考記事:tailコマンドについて詳しくまとめました 【Linuxコマンド集】
viエディタ
サーバー上でファイルなどを変更したい場合に使うもの。既存でこのソフトウェアがインストールされているので簡単に使うことができる。
viエディタでは通常モードでは文字を入力できないので、文字を入力したい場合は「i」を押してインサートモードにする。
また検索したい場合はインサートモードで「/」を入れ、そのあとに検索したい文字列を入力すればOK。
参考記事:viコマンドについて詳しくまとめました 【Linuxコマンド集】
一般ユーザーとrootユーザー
Linuxには権限の違う様々なユーザーがいます。
参考記事:【完全初心者向け】Linuxのrootユーザとは?
sudoコマンド
他のユーザーに成り代わってコマンドを実行することができるもの。(ただし事前に権限付与されている必要あり)
参考記事:Linuxコマンド】sudoで指定したユーザーでコマンドを実行する
Linuxのパーミッションの見方
リナックスではパーミッションが特殊な文字列で表現されます。忘れがちなので。chomod(チェンジモード)なども要チェック。
参考記事:【一通り理解】Linuxパーミッションの基本とその設定方法
psコマンド
psコマンドはprocessを確認できるコマンドのこと。色々とあるので要チェック。
参考記事:psコマンドについて詳しくまとめました 【Linuxコマンド集】
パイプ処理
要するに引き継いで実行するみたいなコマンドですね。
$ <最初に実行されるコマンド> | <右の結果を受けて最終的な結果を返すコマンド>
参考記事:【初心者向け】Linuxパイプラインの使い方を詳しく!
killコマンド
プロセスを終了したり再起動したりするコマンドのこと。
参考記事;プロセスを終了するkillコマンドの使い方まとめ!【Linuxコマンド集】
SSHとは
さてようやくリナックス系のコマンドが終わりました。SSHというのは簡単に言うとtalentコマンドのもうちょい強化版みたいなものらしいです。
離れた場所にあるものを遠隔操作するものだそう。
参考記事;https://wa3.i-3-i.info/word11722.html
で、このSSHにログインするには公開鍵と秘密鍵を使っていて、これを利用することで安全にリモートログインできるそう。
ちなみに手順としては下記。詳しくは参考記事で。
①公開鍵と秘密鍵を生成(ローカル環境側)
②公開鍵をサーバ側に設置(ローカル環境側→サーバ側)
③ 公開鍵認証でログイン
参考記事:初心者がSSHについて学ぶ(´・ω・`)
scpコマンド
scpコマンドというのは送信先のディレクトリを指定してファイルを送れるコマンド。
参考記事:scpコマンドでファイルをリモートサーバからローカルへコピーする
AWSのEC2
EC2というのはAWSが提供する仮想サーバーのことで、Linuxなどをすぐに使えるような環境が整っている。
参考記事:5分でわかるEC2
アプリケーションサーバーのユニコーン
アプリケーションサーバーとはブラウザからのリクエストを受けてRailsなどのアプリケーションを実際に動かすサーバーの事。WEBサーバーのNginxとかと混同しがちなので注意。
参考記事:ApacheとNginxとPassengerとUnicornの違い【すごい初心者向け】
でそのアプリケーションのサーバーの1つがユニコーン
で、このWEBサーバーとアプリケーションサーバーが似ているので下記の参考記事で理解。
参考記事:UnicornとNginxの概要と違い
その上で、ユニコーン使う意義は何なのか?を考える必要がある。一見違いはあまりないので。
参考記事:なぜrailsの本番環境ではUnicorn,Nginxを使うのか?
環境変数とは
環境変数とは、一般に公開できないような情報(PASSなど)を入れるための変数。例えば「secret_keybase」などと記載されているもの。コマンドを打つ事で安全に取得できるよう。
参考記事:https://wa3.i-3-i.info/word11027.html