toraMasa's blog

『関数プログラミング実践入門』を読んだ

5月から新しくアルバイトをはじめるのですが、その部署ではScalaが使われているようなのでScalaの勉強をはじめました。

その一環として、『関数プログラミング実践入門』という本を読んだので、その感想を書きます。

本の内容

0章要約

勉強のため0章『【入門】関数プログラミング』を要約してみました。

『関数プログラミング実践入門』 第0章の要約 · GitHub

感想

  • Reactの参照透過性やPython等のラムダ式など、関数プログラミングの影響を受けた概念の意味がよくわかって良かったです。
  • 再帰的な考え方に慣れることができる(慣れざるを得ない)のも、関数プログラミングを学ぶ利点かなと思います。
  • コードがある程度以上のサイズになると全く意味がわからなくなって辛かったです。理論的にはメリットが多くても実際に採用されづらい理由がなんとなくわかりました。
  • モナドの章は正直あまりわからなかったです。
  • 関数プログラミングの概念が単純に面白いのと、今まで使ってきた命令型プログラミングやオブジェクト指向プログラミングを客観視できたので読んで良かったです。

3月に読んだ本

3月に読んだ本をざっくりまとめてみる。

web

就職する会社がGoをメインに使ってる会社なのでGoを中心に勉強していた。

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ

この本とA Tour of GoをやりながらWeb APIを書いたりした。フレームワークに頼らずAPIを書くのは良い勉強になった。

それから前のバイト先でオススメされていたWeb API: The Good Partsも読んだ。特にキャッシュの設計の話とかは全く知らなかったので読んでよかった。薄いし。

あとコマンドラインツールを作ってみたかったので改訂2版 みんなのGo言語も読んだ。

面白かったけど、色んな人がそれぞれ好きなテーマを書いている感じだったので役に立たない部分もかなり多かった。超いまさらだけどpecoに感動したりした。

その他MongoDBの薄い本とかKubernetesチュートリアルとかやっていた。

低レイヤ

仮想化についてちゃんと理解したいと思って色々勉強していた。

とりあえずC言語を覚えないと行けないと思ってプログラミング言語C 第2版 ANSI規格準拠を読んだ。 正直演習がむずくてできてないやつの方が多い。というかC言語以前に情報理論?の知識が全然足りないとわかった。

ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道も読んだ。バイト先で意味をよく理解しないまま打っていたコマンドや用語の意味がどんどん解消されていった。というかこういう基本的なことも知らないままやっていたんだなーと改めて思った。

それからC言語の練習がてら自作エミュレータで学ぶx86アーキテクチャ-コンピュータが動く仕組みを徹底理解!を読んだ。

↓作ったCPUエミュレータ github.com

思ったより薄いし、ポインタとかアセンブリについての知識もついて良かった。途中からレジスタの名前がこんがらがってよくわからなくなったけど。

ハイパーバイザの作り方は正直あんま理解できなかった。理解するにはlinuxやハードウェアの知識がもっと必要だと思う。

その後、コンピュータの仕組みの全体像を掴みたいと思ってこの本を読んだ。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

これはまだやってる途中だけど、論理回路からはじめてCPU作ってアセンブラ作ってコンパイラ作ってOS作って、最後にゲームを動かす、という内容でめちゃくちゃおもしろい。

github.com

サイバーエージェント

あとは就職先についての本を読んだ。

渋谷ではたらく社長の告白〈新装版〉

憂鬱でなければ、仕事じゃない (講談社+α文庫)

藤田晋の成長論

藤田晋の仕事学 -自己成長を促す77の新セオリーー

感想は書かない。

その他

ザ・ファブル(1) (ヤングマガジンコミックス)を全巻読んだ。

殺し屋モノだけどグロくなくてギャグ多めで良かった。

Railsガイドv6.0全部読む#4-1 Action Controllerの概要編

railsguides.jp

1 コントローラの役割

  • コントローラはモデルとビューの間を仲介する
  • リクエストを受け取り、適切な出力を行う

2 コントローラの命名規則

  • コントローラは複数形であることが望ましい
    • resourcesで一括ルーティングできる

3 メソッドとアクション

4 パラメータ

  • Railsではクエリ文字列パラメータとPOSTデータをどちらもparamsハッシュで取得できる
  • paramsでids=["1", "2", "3"]を渡すには、以下のようにする
GET /clients?ids[]=1&ids[]=2&ids[]=3
  • パラメータの値はすべて文字列
  • paramsにnilがあると自動で[]に置き換えられる
  • paramsではキーとしてシンボルも文字列も指定できる
  • config.wrap_parameters, wrap_parametersはじめて知った
    • ちょっとよくわからん
  • 4.3ルーティングパラメータどういう意味かわからない
  • default_url_optionsもはじめて知った
    • 'I18n.locale'ってなんや
  • requiredなパラメータないと400帰る
  • 'Person.create(params[:person])'これだめなんだ。
  • permitのとこに書くやつは許可済みスカラー値って名前らしい
  • Numericってなんや
  • TrueClass、FalseClassっていうのがあるの初めて知った
  • permit!は要注意。
    • 使われてるの見たこと無いけど。
  • ネストしたパラメータ複雑。
  • 4.5.3 その他の事例ようわからん

5 セッション

  • セッションはコントローラとビューのみ利用できる
  • セッションの保存先ストレージ全部初めて知った
    • デフォルトはCookieStore
    • セッションIDは必ずcookieで渡す
    • 正直セッションとCookieの意味よくわかってない
  • モデルインスタンスは基本的なRubyオブジェクトではない?
  • lazy_loadは理解したがeager_loadの意味を忘れた
  • メモ化ってなに
  • flash.keepって初めて知った

6 Cookie

  • Railsではcookieをhashのように扱える。
  • cookieに複雑なオブジェクトを保存するとJSONとして変換されないケースがあるので、できるだけ単純な値だけを保存するようにする。

7 XMLJSONデータを出力する

8 フィルタ

  • フィルタにはbefore, after, aroundがある
    • aroundはbeforeとafter両方で実行される
    • aroudでは必ずyieldを実行しないといけない
      • yieldってなんすか
  • 一般的にはprivateメソッドを定義して、そのメソッドをフィルタとして追加する
    • ブロックとして与えることもできる
    • sendメソッドを使うとprivateメソッドを呼び出せる
    • クラスを渡すならbeforeメソッド必要
      • beforeメソッドって初めて知った

9 リクエストフォージェリからの保護

  • リクエストフォージェリを防ぐ第一歩は、RESTful規則にそってアプリケーションを開発すること
  • リクエストの偽造から保護するには、すべてのリクエストに予測不可能なトークンを追加すること
  • formヘルパーを使っていたら心配ない。APIとかを作るときには気をつけないといけないと思うけど、あんま書いてない。書いて欲しい。

10 requestオブジェクトとresponseオブジェクト

11 HTTP認証

  • RailsではBASIC認証とダイジェスト認証がビルトインされている

12 ストリーミングとファイルダウンロード

  • send_data, send_fileメソッドでファイルを返せる
    • 前者は新しくファイルを作成する場合、後者は既存のファイルを返す場合に使う
    • PDFって文字列だったんだ
  • ただし利点はあんまない。publicフォルダに置いておいてwebサーバーからダウンロードさせる方が良い。
  • mixin = includeで使用すること
  • カラオケアプリを作る時はストリーミングを使う
    • むずい。ようわからん

13 ログをフィルタする

  • ログに出力したくない情報をフィルタリングできる
    • 使ったことないんだけど大丈夫なんだろうか。

14 Rescue

  • Procオブジェクトってなんぞや
  • rescue_fromにExceptionとかStandardErrorを指定しないほうが良い

15 HTTPSプロトコルを強制する

  • configで設定できる

サマーインターンかんたんに振り返る

はじめに

2020の夏休みにいくつかサマーインターンに参加しました。本当は一つ一つブログに書こうと思ってましたが、時間がなくて後回しにしているうちに忘れてしまいそうなので全部まとめて軽く振り返ります。

参加したインターン

振り返り

サイバーエージェント

www.cyberagent.co.jp

これは詳細を別記事に書きました。

toramasa.hatenablog.jp

某社

概要

やったこと

選考

  • ES + 面接

感想

  • 詳細を記事に書いて公開して良いか聞いたんですが社内の審査がすごい大変そうだったので公開は控えます。
  • でもめちゃくちゃ楽しかったし社員の方がすごいエンジニアばかりでした。参加したハッカソン型のインターンの中では自分的には一番良いものを作れたと思ってます。

AWS

概要

aws.amazon.com

  • 期間: 3日間

やったこと

  • AWS のサービスを組み合わせてお客様の課題解決を技術的に支援するソリューションアーキテクトの業務を想定して、学生数名チームで実在する大規模コンシューマー向けサービスを実現するアーキテクチャを設計し、その内容を他のインターン参加者や社員に対して発表するという課題を予定しています。インターシップのプログラムの中には他のポジションの紹介や、社員との交流会も予定しているため、Amazon/AWSのカルチャーやキャリアパス等についても学べる場となっております。当インターンシップは選考直結型のプログラムです。
  • 自分はwell architected frameworkの勉強をしていたのとAWSの構築・運用の経験が一応あったのでアーキテクチャの設計や質疑応答等を中心になってやっていました。
  • ただ質疑応答で社員の方に見事に論破されて結果負けたので責任を感じてます。

選考

  • レジュメ + 技術課題 + (面接)

感想

  • インフラは個人だと取り組める範囲に限界があるので貴重な経験でした。
  • 個人的に面白かったのは、懇親会に社員の方がスライドを作ってきていたことです。笑 学生がポテチを食いながら社員さんのLTを聞いているのがシュールでした。(Amazonってスライド作っていいんだ。。。笑
  • あとアレクサをもらいました。

Sansan

概要

www.wantedly.com

  • 期間: 1day

やったこと

  • 名刺アプリ作成ワークショップ(Rails)

github.com

選考

  • ES

感想

  • 参加する前は1dayのインターンって役に立つのかな、と思っていましたがめちゃくちゃ参加してよかったです。(本当は就業形に参加したかったんですが書類選考で落ちました。書類選考で落ちたのはここだけだったので辛かった)
  • コードレビューめっちゃ丁寧にしてもらえて勉強になりました。コードきれいって言ってもらえて嬉しかった。
  • CTOの藤倉さんの話をめちゃくちゃ聞くことができて最高でした。

Cookpad

概要

internship.cookpad.jp

  • 期間: 5日間

やったこと

  • 1.5日 web開発講義(RailsAWSのCodeDeployを使ったCI/CD環境構築)
  • 1.5日 サービス開発講義
  • 2日 PBL

github.com

選考

  • ES + プログラミングテスト + 面接

感想

  • 一番おもしろかったです。技術だけじゃなくてサービス開発とは、みたいなところを学べました。こんなにサービスについて真剣に考えたことははじめてだったのでしんどくもあり楽しくもありという感じでした。
  • ここでFigmaがっつり触ったおかげで後々のインターンでモック作ったりするとき役立ちました。Figmaは色々使えて便利。

toramasa.hatenablog.jp

github.com

techlife.cookpad.com

NTTドコモ

概要

information.nttdocomo-fresh.jp

やったこと

感想

  • 色々あって自分ひとりで全部開発したのでちょっと辛かったです。
  • クラッシャー気味な人がいて、その人ともうまくやろうと試行錯誤する中でファシリテーションだったりリーダーシップ的な能力の大切さを実感できました。

ハウテレビジョン

概要

www.wantedly.com

  • 期間: 6日間

やったこと

  • 外資就活ドットコムを運営するハウテレビジョンは実務経験型のエンジニアインターンを開催します。
  • インターンでは、みなさんが使っている「外資就活ドットコム」の機能を実際に開発、リリースするまでを目指していただきます。 いつも使っているサービスを、自分が書いたコードで動かす、みんなが使う、そんなエキサイティングな経験をしてみませんか。 期間中は参加者同士でチームを組み、メンター社員のサポートのもと新機能開発に挑戦していただきます。

選考

  • ES + 面接 + プログラミングテスト

感想

  • GoでCRUDを一通り書けるようになりました。
  • Goで書かれたプロダクションコードをはじめてがっつり読みました。クリーンアーキテクチャよくわかってなくて大変でした。笑
  • 心配になるくらい待遇が良かったです(参加10万 + 優勝するとプラス10万、寿司とか叙々苑弁当が毎日出ました)。
  • やたら東大生が多かったです。

Wantedly

概要

www.wantedly.com - 期間: 3週間の就業形インターン

選考

  • アンケート + (プログラミングテスト) + 面接

感想

  • これは今やってる最中なので終わったら別記事に書く予定です。

最後に

  • 時間的に参加できなかったものもありますが、色々経験できて良かったです。
  • ただその分インプットに割ける時間はあまりなかったので、今学期はCS等の勉強に時間を使いたいと思ってます。
  • 貴重な経験をさせて頂きました。本当にありがとうございました。

Railsガイドv6.0全部読む#2-1 Active Record の基礎編

https://railsguides.jp/active_record_basics.html

Railsガイド

1 Active Recordについて

  • Active Record
    • MVCのMに相当する
    • ORMフレームワーク
    • 『Patterns of Enterprise Application Architecture』という書籍で記述されたパターンの一つ

2 Active RecordにおけるCoC(Convention over Configuration)

  • モデル名やテーブル名には命名規則がある

    • それに従えば、自動で色々メソッドを生やしたりしてくれる
  • 特定のカラム名は予約されている

3 Active Recordのモデルを作成する

  • Active RecordモデルはApplicationRecordクラスを継承すれば良い

4 命名ルールを上書きする

  • Active Recordは基本的にモデル名から自動でテーブル名を推測するが、もちろん明示的に指定することもできる

5 CRUD: データの読み書き

  • Active RecordはCRUD操作に必要なメソッドを自動で生やしてくれる

6 バリデーション(検証)

  • モデルがデータベースに書き込まれる前にモデルの状態を検証できる。
    • 属性が空じゃないか
    • 属性が一意か
    • 特定のフォーマットに沿っているか等

7 コールバック

8 マイグレーション

感想・メモ

  • コールバック以外はだいたい知ってた
  • destroy_byとかdestroy_allは知らなかった
  • update_allも初めて知った

    • 結構知らんやん
  • Active RecordはRails最大の利点らしいのでじっくり読む

わかんないとこ

  • コールバック
  • bin/railsのbinってなんだ?

UIデザインに入門してみた

今回勉強したこと

www.figma.com

  • なるほどデザインを読んだ

books.mdn.co.jp

Figma入門

所要時間: 2時間(自分はダラダラやったので3時間かかった)

Chapter 1: Figmaの概要とセットアップ

note.com

要約

  • Figmaに登録した
  • Figmaはすごい
    • Figmaの利点はオンラインで共同編集できること
    • 欠点はリッチなインタラクションを作れないこと(欠点というよりそういう目的のツールではない)

メモ

  • Figmaスマホアプリ使えば実機での検証もできる。。。すごすぎる
  • Zeplinってプロトタイプを渡すためのツールだったのか。じゃあFigmaでええやん
  • Figmaデスクトップダークモードに対応してほしい リンク四角いの貼る

Chapter 2: Figmaの基本操作

note.com

要約

  • Frameとかボタンとか作った

Chapter 3: Figmaのレイヤーを扱う

note.com

要約

  • Figmaにおけるレイヤーの概念を理解した
  • グループ化やページ分け等の利点を確認した

Chapter 4: コンポーネントとスタイル

note.com

要約

メモ

Chapter 5: プロトタイピング

note.com

要約

  • プロトタイピングの方法を学んだ
  • とにかく実機テストがすべて
    • その際スマホスタンドがあるとやりやすい
      • ぽちった

Figmaが目指すデザインのあり方

note.com

要約

  • デザインの大きな3つの変化
    • ピクセルの操作からアイデアの操作へ
    • 完成品から永遠の未完成品へ
    • デザイナーのものからみんなのものへ

なるほどデザイン

  • 読んだ

学び

  • Figmaを利用して実機を用いたプロトタイプを協同で作成する方法を学んだ
  • Figmaがなぜ使われているか理解した
  • UIについてはエンジニアも理解する必要があるとわかった
  • デザインについて雰囲気で理解した

感想

  • Figmaの誕生によってデザインがだいぶエンジニアにもやりやすいものになったと思った
  • デザインはサービスの重要な付加価値の一つだし、必ず理解したい
    • というかサーバーレスとかの傾向から行くと必須なのではとすら思う
  • デザイナーってすごい

  • 関係ないけどはてなブログは編集途中の内容を自動でバックアップしてほしい。esaみたいに。間違えて別のボタン押したら消えた。

Railsガイドv6.0全部読む#1 Railsをはじめよう編

Railsガイド

背景

  • RailsGuideを何度も読めばRuby on Railsのことは8割わかるとのご意見を聞いたので、全部読む
  • 以下はメモです。

1 本ガイドの前提条件

  • 読者にRailsの経験がないことを前提としています。って書いてあるけど、それはきついのでは?

2 Railsとは何か

  • DRY
  • 設定より規約が優先されるの意味があんまよくわからない

3 Railsプロジェクトを新規作成する

  • フォルダの目的とか以外と知らないことが結構ある

4 Hello, Rails!

  • javascriptランタイムってなんだ
  • Pumaってwebサーバーだったのか。。
  • '一般に、Railsの開発モードではファイルに変更を加えた場合でもサーバーを再起動する必要はありません'
    • 最近再起動しないとエラーが出るようになったんだけど俺だけかな?
  • スモークテスト
  • hamlとかslimとかはどういう風に使い分けられているのかな?
  • ERBを処理するコードはどんな感じ?
    • 辛そう
  • invokeってなんだ

5 アプリケーションの実装と実行

  • RESTに対する理解足りない
  • フォーマットとかハンドラーの部分がちょっと難しかった
  • formビルダーのlocal: trueってなに
  • 'form_withはデフォルトではAjaxを用いてフォームを送信するため、完全なページリダイレクトはスキップされます。本ガイドでは説明を簡単にするためlocal: trueを無効にしてあります。'どゆこと
  • マイグレーションRubyのクラス
  • hogehoge_paramsを外部がpublicメソッドだったときに考えうるリスクってなに
  • /articles/:id(.:format)のformatってなに
  • 'CRUDアクションは、多くの場合index、show、new、edit、create、update、destroyの順で配置されます'
    • 知らなかった。気をつけよう
  • Railsガイドって誰が書いたんだ?
  • ビルトインヘルパーって何
  • pluralizeってRailsのメソッドなんだ
  • パーシャル=部分テンプレート
  • protectedメソッドてなんだ
    • OOPの理解が足りない
  • rails-ujsの役割を初めて知った

6 2番目のモデルを追加する

7 リファクタリング

8 コメントを削除する

9 セキュリティ

  • BASIC認証はなんとなくわかるけど、他のよく知らない。。。
    • Authlogicというgemはじめてしった。devise一強だと思ってた。

10 次に学ぶべきこと

第二弾はActive Recordの基礎

11 設定の落とし穴

Railsでの無用なトラブルを避けるための最も初歩的なコツは、外部データを常にUTF-8で保存しておくことです。このとおりにしないと、RubyライブラリやRailsはネイティブデータをたびたびUTF-8に変換しなければならず、しかも場合によっては失敗します。外部データを常にUTF-8にしておくことをぜひお勧めします。
  • Railsがデータベースから読みだしたデータをUTF-8に変換するタイミングはいつ

学び

感想

  • Railsガイドの構成が、モデル -> ビュー -> コントローラーなのが不思議。自分はモデル -> コントローラー -> ビューの順番に重要だと思うから(というかビューは比較的重要性が低いと思っている)。
  • Railsを学ぶ最大のメリットは、歴史上最も成功したwebフレームワークの一つであるRailsを通して、webアプリケーションフレームワークの思想や原則(The Rails Way)を身につけられるのが最大のメリットかなと思う。
  • 知らないことが大量にあって恥ずかしく思った。
  • めっちゃ勉強になる。
  • 勉強したいことがたくさんあるので、優先順位をつけてうまく片付けていきたい。
  • 1h21min

引用

Railsガイドv6.0