瀬谷 吏

ポート株式会社 / WEB開発部:東京都

瀬谷 吏

ポート株式会社 / WEB開発部:

人生社会を彩る盛り上げるための開発をしたい

私は、人生、社会を華やかにするものが好きです。利便性や、自信、生きる活力等を人並びに社会に与えられるものです。そして、そういった物を作りたいし、世の中に伝えたていきたいです。

Ambition

In the future

https://www.notion.so/8190c19ae5374e5b9e96b1572ef4d381 リンクにプロフィール及び経歴をまとめました! Wantedly記載の内容も全て含んでいます!当リンクの方が読みやすいと思いますので、ご覧くださいますと幸いです!

About ポート株式会社

ポート株式会社4 years

WEB開発部:Present

- Present

・Ruby(Rails)を主とするサーバーサイドエンジニアとして入社 ・自分でWEBアプリケーションを開発できるようになりたいと思いフルスタック, フルサイクルエンジニアになることを目標に業務を通しながら学習している

  • 新規オウンドメディア/立ち上げ&保守運用

    【開発】 ・Wordpressによるコラム型コンテンツのオウンドメディアをリニューアルする。  ・コラム型コンテンツの拡張、コンテンツ掲載以外の機能拡張を目的としている。  ・その立ち上げから保守運用まで一気通貫して行う。 ・Ruby(Rails), Javascript(TypeScript, React)で実装を行う。 ・チームメンバーは、自身と他にインフラエンジニアとデザイナーを合わせて3人。  ・インフラエンジニアは以下を担当。自身の機能開発と並行して行う。   ・AWSでの CodePipeline による CodeBuild を使用した ECS へのデプロイ   ・staging環境構築 ・Railsによるリニューアルを行う。下記は、その背景。  ・Node.jsやPHP等の他の技術で実装することも検討材料として含めたが、リリース時期を考慮して迅速に開発する必要があったこともあり、自身が一番使い慣れている技術を選択する必要があった。  ・また、社内のスキルセットから見てもバックエンドは9割Railsエンジニアであるため、Railsを使用した方が社内リソースでの継続的保守運用がしやすかった。  ・Rails(Ruby)は決して旬な技術とは言えないが、国内ではまだまだ現役であるため、採用という観点からもRails(Ruby)エンジニアは新規採用がしやすく安定的な運用につながる。  ・また、教育もしやすく、記事型メディアということもあり特別複雑な処理が存在するプロジェクトではないので、最悪Rails初心者でも開発に着手可能。 ・フロントエンドの開発において 、TypeScript + Reactも採用。下記は、その背景。  ・初期リリースにおいてはRailsによるERBも含めて実装するため、使用技術において特別な縛り等はなかったが、今後の採用活動の中でモダンな技術を積極的に組み込んでいることを実態に合わせて見せるたいという開発部の思いがあった。  ・また、社内の他プロジェクトにおいて、主要な全ての開発がTypeScript + Reactへ移行していることがあった。  ・加えて、開発部として社内のエンジニアにはTypeScript + Reactでフロント実装できるようになって欲しいという思いがあり、自分もそれができるようになりたいと常々思っていたことがマッチし、それを実行できる大きなチャンスであったため。 ・要件定義、基本設計、詳細設計、DB設計は自身で行う。  ・今回のプロジェクトの要である「記事コンテンツ」についての設計   ・コラム編集は、markdown形式で行うことになった。   ・それにより「編集はmarkdown」「表示はHTML」と二つの状態が存在することになる。このとき、表示の度にmarkdownをHTMLに変換するのは非常に非効率であるため、それらを保持それぞれ何らかの形で保存した方がいいと考える。   ・そこで今回は、markdown形式のデータだけをログのように残す形で、記事データには単一のHTML形式だけを保存するようにした。   ・Mementoパターンとは似て非なる構造だが、同じように過去の状態に戻すことも可能となることに加え、表示の度にデータ形式変換を行わなくて済む。   ・懸念点としては、編集が増えるほどメモリへの負担も大きくなっていくこと。そのため、古いデータは定期的に削除するようなライフサイクルを組み込まなければいけない。 【環境】 『言語・フレームワークなど』 ・Ruby(3.0.2)  ・Ruby on Rails(6.1系)  ・Rspec ・JavaScript  ・TypeScript  ・React  ・Node.js(16.7.0)  ・Webpack 5  ・Jest  ・ESLint  ・Prettier 『ミドルウェア』 ・MySQL(5.7) ・Nginx ・Docker 『インフラ』 ・AWS  ・RDS  ・S3  ・ECS  ・ELB 『その他』 ・GitHub ・Figma ・Slack ・Kibela ・Airbrake 【タスク】 『環境構築』 ・Webpack導入によってバックエンドとフロントエンドの開発環境を分離する ・TypeScript + Reactの開発環境構築 ・Jest, ESLint, Prettierの導入 ・MySQL, Rspecの導入 ・Dockerの導入  ・Node.jsとRailsのマルチステージビルドによってイメージサイズを最適化する 『機能開発』 ・Wordpress DBの記事コンテンツをRails DBに移行 ・画像のアップロード機構作成  ・gem carrierwave を使用  ・画像のリサイズには libvips を使用  ・libvips の選択の背景   ・ImageMagicより高速に処理ができること。   ・Rails7.0系からActive StorageのデフォルトのvariantがImageMagickからlibvipsに変更されたこと。今後Railsのバージョンを7.0系に上げた場合に、variant変更のコストが発生しない。 ・コラム型コンテンツ管理機能作成  ・markdownエディターを採用  ・エディターの生成には react-simplemde-editor を使用。下記は、その選択の背景。   ・ライブラリ選択に係る機能要件としては、リアルタイムプレビューが存在すれば他はシンプルなエディターとして機能存在すればよかった。また、独自の記法も追加するので拡張が任意で可能なものであること。   ・react-simplemde-editor は、機能要件も満たしており拡張も可能。デフォルトの機能も非常にシンプルだった。また、他プロジェクトで使用している例も存在した、社内での管理も比較的しやすい。   ・react-simplemde-editor は、内部で easy-markdown-editor というライブラリを使用していて、それをReactコンポーネントでラップしたものです。この easy-markdown-editor のメンテナンスが継続的に行われていることが確認できたので、セキュリティという観点でも一先ず問題無いと判断した。   ・markdownパーサーには markdown-it を使用。下記は、その選択の背景。   ・ライブラリ選択に係る機能要件は、独自の記法を拡張できること。   ・markdown-itは要件を満たしている。また、Marked等の他のライブラリと比べて公式及びコミュニティによる拡張プラグインが充実していて、記法の拡張が柔軟にできることがわかったため。   ・頻度が高いわけではないが、ライブラリの更新も継続的に行われていて管理されていることが確認できた。 ・デザインデータ(psd)を元にviewを構築 ・SEO対策  ・metaタグの各種設定  ・サイトマップ作成。Amazon EventBridgeによってサイトマップ生成を定期実行し、S3に保存する。  ・構造化マークアップの作成。  ・画像遅延読み込みやページキャッシュ等によるサイトスピード向上。 【現在】 ・2022/2月初旬にリリース完了 ・新規機能開発継続中 ・プロジェクトメンバーに変化なし

  • 就活メディア/新規機能開発&保守運用

    【開発】 ・就活メディアの新規機能開発、保守運用を行う。 ・当サービスは、就活生がユーザー登録を行い、サイト内の掲載就活イベントにエントリーすることができる。そして、イベントエントリーを介してユーザーと企業(クライアント)をマッチングさせるサービスである。 ・主にRuby(Rails), Javascript(TypeScript, React)で実装を行う。 ・チームメンバーは、時々により人数の変動はありますが概ね5~7人。 【環境】 ※下記以外にもプロジェクトで使用される言語、ツール等は存在する。自分が触れたことのあるものだけ記載している。 『言語・フレームワークなど』 ・Ruby  ・Ruby on Rails  ・Rspec ・JavaScript  ・TypeScript  ・React  ・Node.js  ・Webpack  ・Jest  ・Prettier  ・Storybook 『ミドルウェア』 ・MySQL ・ElasticSearch ・ElastiCache ・Redis ・Nginx ・Docker 『インフラ』 ・AWS  ・RDS  ・S3  ・ECS  ・ELB  ・Dynamodb 『その他』 ・ GitHub ・Airbrake ・Figma ・Slack ・Kibela ・Notio ・asana ・Mackerel ・Redash(BigQuery) 『比較的大きめのタスク』 《ユーザー情報に係る学校マスタ(全国の短大, 大学, 大学院の学校名, 学部, 学科の情報)の更新》 ・gem nokgiriを使用したrakeタスクによりWEBスクレイピングを行う ・抽出データをDBと突合することで差分を抽出しつつ更新を行う ・入社後1ヶ月経った頃に初めて取り組んだ大きめのタスクということもあり反省点が多いと感じた。  ・当時はワンタイムな処理でしかタスクを完遂させることしかできなかったが、理想は学校情報に変更があるたびにそれが学校マスタに反映されることなので、今思うと以下のような設計ができればよかったと感じる。   ・スクレイピング&HTML解析を容易に実行することができるpythonのBeautifulSoupというライブラリを使用してスクリプトを組む。   ・Rails側で学校マスタ更新用のエンドポイントを作成。   ・スクリプトでは変更差分の有無の確認、及び変更がある場合はその内容をRailsで用意したエンドポイントにPOSTする。   ・また、スクリプトの処理として、解析内容は特定のフォーマットに沿った内容でS3に保存し、次回の変更差分の有無の確認はそれを読み込んで行う。初回実行時だけはCSVを事前に用意する。   ・API GatewayでS3にアクセスするためのインタフェースを作成。   ・スクリプトは、AWS Lambdaで定期実行する。 《ERBで構築されたイベントエントリーフォームをReactで書き直す》 ・自分と他フロントエンドエンジニアの合計2人で行う ・自分bの担当は「エンドポイントで必要になるデータの解読」及び「フォームで必要になるオプションの値の形成」である ・イベントエントリーに係る処理はドメインロジックにあたり、複雑に分岐が発生していてコードの理解に苦戦した。 《EFOによる会員登録フォームのCVR改善》 ・デザイン及び登録プロセス変更によってCVR改善を目指す ・PMと相談しながらプロセスを数段階に分けてABテストを繰り返すことで変更を徐々に加えていった ・CVまでのフォーム離脱の確認は、トラッキングデータをFirebase Functionsで作成したエンドポイントにPOSTすることでFirestoreに溜まるようにし、それを別途設置したviewで可視化することで行った。 ・POSTは全てBeacon APIを使用。そのため、非同期かつレンダリングをブロックしない。 仮にFunctionsが死んでいて500エラーが起きても、ユーザー側への影響はない。 《ユーザーのマイページ上でのイベント参加日程変更機能作成》 ・特別難しい実装をしたという話ではないが、サイトのドメインロジックでありサイト全体の機能に大きく影響するポイントになるので、慎重になる大事なタスクだった。 《オンライン模擬試験ツールの作成》 ・バックエンド2人(自分含む)、フロントエンド1人、デザイナー1人、PM1人の小数チームで取り組んだ。 ・このとき、自分は開発に加えてディレクション業務を兼任した。PMに対して要件定義を行い、設計からタスクの優先度決定及びその分配、コードレビュー、そしてそれらの進捗管理を行った。 ・このタスクでは、バックエンドとフロントエンドの実装は完全分担で行った。しかし、実装上でトラブルなど起きることは無く非常に円滑に事を進めることができた。  ・このようなケースでは、例えば、バックエンドとフロントエンドのデータ連携部分となるAPIの入出力の部分で議論が起き足踏みすることがあると伺ったことがある。  ・今回そのようなことが無く円滑に連携して業務を行えた理由は、以下だと考える。   ・初めの設計の段階で「どのようなデータが」「どのような形式で」「どのタイミングで必要になるか」をエンジニア3人でしっかり共通理解を構築し、ある程度具体的な形で設計できたこと。   ・実装していく中で流動的に初期設計内容と異なる内容で実装したいケース必ず出てくることは前提として存在するため、チームの定期的なMTG以外でもエンジニア3人で細かいコミュニケーションを積極的に全員が行うようにしていた。 《ユーザー情報取得に係る新規フォームの作成》 ・クライアントへのユーザー送客最適化に伴い、営業を行う部署と協力し、要件定義から設計、実装まで一貫して行う。 ・当タスクは、比較的取引の多い複数のクライアントの要望を基に発生したものであり、ユーザーから取得したい情報が具体的にクライアントから提示されていた。そのため、要件定義での営業部署へのヒアリングの中で、クライアントとの実際のやり取りの内容を見せてもらって機能設計の参考にさせてもらったこともあった。 《Railsのバージョンアップ(5.2系→6.0系)》 ・プロジェクトメンバー全員(6,7人程)で分担して行う ・これに伴って使用gemのバージョンアップを先に行う

    -
  • スキルセット

    【言語】 『Ruby』 ・独学1年, 業務2年 ・メンバーに指導ができる ・フレームワークを用いて一人でアプリ開発ができる 『JavaScript』 ・独学1年, 業務2年 ・トラブルシュートができる ・任意の処理を実装することができる ・関数の参照透過性を意識し、データと振る舞いを分離させることを考慮した実装に努めることができる 『HTML/CSS』 ・独学1年, 業務2年 ・トラブルシュートができる ・任意のデザインデータを再現できる ・レスポンシブな実装ができる ・基本的なセマンティックHTMLの理解はある ・CSS設計手法(BEM, FLOCSS等)を適用した実装ができる 『C』 ・学生時代2年 ・業務経験無し ・簡単なプログラミングができる 『C++』 ・学生時代半年 ・業務経験無し ・簡単なプログラミングができる 『Java』 ・学生時代1年 ・業務経験無し ・簡単なプログラミングができる 【フレームワーク】 『Ruby on Rails』 ・独学1年, 業務2年 ・メンバーに指導ができる ・一人でアプリ開発ができる ・SQL最適化、キャッシュ、eager loading等のパフォーマンスを考慮した実装ができる ・オブジェクト指向、設計原則を考慮した実装に努めることができる ・レイヤーアーキテクチャを組み込んだ高可用性、保守性を考慮した実装に努めることができる 『jQuery』 ・独学1年, 業務1年 ・トラブルシュートができる ・任意の処理を実装することができる 『React』 ・業務1年 ・トラブルシュートができる ・任意の処理を実装することができる ・Reactの思想であるコンポーネント単位で管理することが可能な実装ができる ・関数コンポーネントとHooksを使用した軽量な実装ができる ・関数そのものをメモ化するuseCallbackや、関数の結果を保持するuseMemo等、Hooksを適宜使い分けることができる 『TypeScript』 ・業務1年 ・トラブルシュートができる ・任意の処理を実装することができる ・環境構築から機能開発までできる ・Reactと組み合わせて実装できる ・型推論を理解して実装できる ・ジェネリクスを理解して実装できる ・ダウンキャストを理解して実装できる ・union型やintersection型などの複合, 交差型を操作して任意の型操作ができる ・void型, unknown型, never型を使い分けることができる ・typeとinterface の違いを理解して実装できる" 【DB】 『MySQL』 ・独学1年, 業務2年 ・DDL, DML、DCLの基本的な内容は理解し、基本的なSQL構築、DB操作ができる ・論理削除、物理削除の違いを理解している ・インデックス、外部キー制約等の役割とその仕様を理解している ・JOIN(内部結合、外部結合)を理解して使用できる ・GROUP BYや集計関数を,HAVINGと組み合わせて使用できる ・サブクエリ、UNIONを使用できる。パフォーマンス最適化はスムーズにはできない。 ・トランザクションを必要に応じて使用できる ・インデックスが効かない検索条件(LIKE句による中間一致及び後方一致等)を理解している ・SQLの論理的処理順序(...→WHERE→GROUP BY→HAVING→…等)を理解している ・正規化されたテーブルを設計できる(事業優先度によっては必ずしも正規化するとは限らない) 【その他 ミドルウェア、サーバー等】 『Webpack』 ・業務2年 ・Rails開発からフロントエンド開発を分離するために使用した経験がある ・バンドルファイル生成に係るオプションを理解して設定できる ・任意のプラグインを追加し、機能を拡張できる" 『Docker』 ・業務1年 ・任意のdockerイメージを使用してdockerコンテナを実行できる ・docker-composeの設定を理解して実装し、複数のdockerコンテナを操作できる ・これまで実装したdockerファイルを以下に示す  ・Rails  ・Nginx  ・MySQL  ・Redis ・Railsのdockerファイルについては、マルチステージビルディングによってNode.jsをビルドし、webpackで生成したバンドルファイルをRailsの中に移すという操作を行った。 『AWS』 ・業務2年 ・調査必須として、任意のAWSリソースを使用できる ・機能開発に伴って使用することがほとんどだった ・サービス立ち上げに伴うインフラ環境の構築という段階においては、知識レベルでは一定理解はしているが、負荷, インシデント対策等を考慮した業務レベルの構築はまだ難しい 『Git』 ・独学1年, 業務2年 ・チーム開発で使用した ・任意の操作ができる 『Rspec』 ・業務2年 ・メンバーに指導ができる ・セットアップできる ・任意のユニットテスト、統合テスト、システムテストを実装できる 『Jest』 ・業務数ヶ月 ・セットアップできる ・初学レベル ・調査必須として、テストを実装できる 『Storybook』 ・業務数ヶ月 ・セットアップできる ・初学レベル ・調査必須として、storyを実装できる ・TypeScriptと合わせて使用できる

  • その他

    【開発部チーフに昇格(2021/4月〜)】 ・開発業務の他に、入社して半年が経ったあたりからマネジメント、チームビルディングに係る業務にも注力していたことが評価され、2021年4月に開発部のチーフとなる。 【採用業務(22卒採用〜)】 ・サーバーサイドエンジニアの新卒及び中途採用の一次面接及び面談を担当する一人になる。 【新卒研修, メンター業務】 ・20卒及び21卒の新卒入社したエンジニアへの研修及びメンターを担当する。新卒のタスクのコードレビューを主に行う。 ・新卒研修は、概ね以下の内容の説明等を実施。新卒のスキルレベルは、基本的にRuby(Rails)を使用したことがない or Railsチュートリアルの内容を学習済みである。  ・Railsを使用したMVCアーキテクチャの説明  ・Ruby(Rails)の練習問題  ・コードの可読性について   ・プログラムを書くうえで最も大事なこととして説明している   ・オブジェクト指向(継承、カプセル化、ポリモーフィズム)の説明&練習問題  ・設計原則(単一責任原則、開放閉鎖原則、凝集度・結合度)の説明  ・Rails(ActiveRecord)の詳細な仕様(SQLキャッシュ、eager loading、クエリがいつ実行されるか等)の説明  ・プロジェクトで採用しているレイヤーアーキテクチャ(decorator, validater, form, service等)の簡単な説明  ・開発の品質とスピードについて、以下の説明   ・タスクの目的を捉え、期間に対して最適なアウトプットに努めること   ・タスクの進行が遅れてしまったor遅れそうな場合に必ず相談すること 【ディレクション】 ・入社して半年経った頃から始まる。6,7人程のチームでチームリーダーが行っていた業務を分担して行う。 ・他部署から降りてくるタスクの要件定義に始まり、タスクの分解や優先度の決定、他メンバーへのタスクの分配等を行う。降りてくるタスクも多いのでそもそも開発タスクとして実行する必要のないものの取捨選択も行う。

日立市役所4 years

納税課

-

・徴税吏員として滞納処分を執行する(督促、財産の差押え等)

子ども施設課

・保育認定(保育を必要とする家庭かどうかを判断する。必要とする家庭の場合は認定証を出す。) ・園児の入園調整(入園申請に基づいて、保育施設の状況を考慮して安全に保育が行えるように園児の入園先を決定する) ・保育施設の監査(安全に保育を行うために定められた基準を満たしているか施設の監査を行う)

茨城大学4 years

工学部情報工学科

-

・情報処理全般(C, C++, Javaを使用したプログラミング学習, アルゴリズム学習, TCP/IP基礎, ソフトウェア・ハードウェア基礎, ネットワーク基礎, 情報セキュリティ等)の学習 ・研究分野:自然言語処理

  • 大学4年:自然言語処理に関する研究

    ・自然言語処理に係る卒業研究を進める。 ・文章中の意味がわかっていない単語について、その前後の文脈から単語の語義を自動識別することを研究テーマとしていた。 ・当研究は、教師有り学習によって機械学習を行い、構文解析によって語義の曖昧性解消の向上にアプローチをかけるものであった。 ・これを検証するために使用した言語はpythonである。

    -
  • 大学1年〜3年:数学, ソフトウェア, ネットワーク

    「数学」「ソフトウェア」「ネットワーク」の基礎を主として学ぶ。 【数学】 ・教養数学を始めとして、解析学、代数学、幾何学全般を学習した。 ・個人的にはベクトル解析、フーリエ解析、確率論等の解析学の学習の割合が高かったと思う。 【ソフトウェア】 ・C, C++, Javaを用いたプログラミング学習が中心だった。 『C言語』 ・アルゴリズムの学習で使用した。アルゴリズム学習は主にソート及び探索を扱った。 ・ソートアルゴリズム学習では、バブルから始まり、クイック、マージ等のソート法を学習する。 ・この時、演算回数やメモリ消費量、実行時間等を計測し「どの条件の時にどのソート法が適しているか」を解いていた。 ・探索アルゴリズム学習では、線形探索に始まり、二分探索、ハッシュ探索等を学習する。最終的には平行二分探索木を学習し、それをC言語で実装した。「ポインタのポインタ」という概念に苦戦をした記憶がある。 ・ソートアルゴリズム学習と同様に、各種計測を行い「どの条件の時にどの探索法が適しているか」を解いた。 『C++』 ・ソケット通信を用いた五目並べゲームを実装した。 ・ソケットの生成、接続、切断の一通りのライフサイクルについて、サーバー側及びクライアント側のそれぞれを実装を通して学ぶ。 『Java』 ・ウィンドウ上で行うじゃんけんゲームを実装した。 ・ここではクラス、インスタンス、継承等の概念を学びオブジェクト指向に触れていった。 【ネットワーク】 ・TCP/IP, コンピュータアーキテクチャ(入出力装置, CPU, メモリ等を取り巻く設計について), 論理回路, 情報セキュリティ等の基礎を学ぶ。 ・情報セキュリティでは、共通鍵暗号方式、公開鍵暗号方式を学び基礎を押さえた程度である。

    -

Keep up to date with your connections on the Wantedly People App.