個人開発

上場企業の公開済み財務データを可視化するサービス(investee)
サイトhttps://investee.info
開発時期2023年9月〜10月
使用技術Docker, nginx, React.js, Material UI, Recharts, TypeScript, Ruby, Ruby on Rails, Sidekiq, GraphQL, PostgreSQL, Redis, Ubuntu, さくらVPS
コメント前日以前に公開された財務データ(貸借対照表・損益計算書・キャッシュフロー計算書)をグラフ化して一覧表示するサービス。 上場企業の財務データを閲覧・検索できるサービスは世に存在するが、それを可視化して一覧表示するサービスは見当たらなかったため開発した。 ユーザー層としては株など個別企業への投資家をターゲットとしているため、各企業の株探へのリンクをつけており、企業の株価などもすぐチェックできる。 貸借対照表・損益計算書において国際会計基準や金融機関のデータが表示対応していないことが伸びしろ。 今後予定している追加機能として、お気に入り登録・ROAやROEなど経営指標の表示を予定している。
アピール財務データの自動切替によってユーザー側で操作せずとも財務3表を繰り返し見れる。またキャッシュフローのタイプによる検索も可能。 訂正財務諸表が提出された場合もそれを取り込んで常に正確な財務データを表示できる。 技術面では、将来的にモバイルアプリを作りたいと考えているが、表示するデータをフロントエンドで自由に選択できるように(フロントエンドが欲しいデータのみをバックエンドが返すために)、 フロントエンドとバックエンドのインターフェースにはGraphQLを使用した。
福井に拠点のあるNo.1企業を共有し、また他ユーザの共有内容を閲覧できるサービス(F1C)
サイトhttps://f1c.biz
開発時期2022年5月〜6月
使用技術Docker, nginx, Vue.js, Vuetify, Nuxt.js, TypeScript, Node.js, Express.js, Firebase (Authentication, Functions), PostgreSQL, Ubuntu, さくらVPS
コメント自分自身が一時期、地元である福井の企業を探す機会があったが、なかなか福井にはどのような企業があるのかを探すのが難しいと感じたことが開発のきっかけ。 現在は福井の人口流出が続いているものの、「自分は把握できていないが、優良な企業」はたくさんあると思い、福井への関心が高まることでUターンする人も増えて、 個人・企業・地域がWin-Winの関係を作れればという思いで開発。しかし、「個人ユーザには投稿するメリットがない」「企業の人にはこのサービスの認知をされない」など投稿する人の立場に立った企画ができていないという問題が発生している。 (地元の新聞社に新聞記事としてこのサービスの掲載依頼を行ったり、地元の団体のサイトへ掲載依頼を行うもむなしく掲載されず、認知されないという企画倒れなサービスとなっている。) このサービスの開発の記録は以下を参照 https://qiita.com/shin4488/items/65dc5fba6a3df1eeb4f8
アピール各企業のホームページに設定されているmetaタグの"og:image"情報の取得を「リアルタイムで取得」から「日次バッチで取得しDB保存」 としたことで、リアルタイムの処理負担が減り、投稿取得のサーバサイドの処理時間が1秒ほど短縮した。
常に満塁から始まる野球盤ゲーム
サイトhttps://baseballgames.jp.net
開発時期2021年5月
使用技術Docker, nginx, Vue.js, JavaScript, Gulp, webpack, Firebase (Authentication, Firestore), Ubuntu, さくらVPS
コメント全球が満塁から始まる設定の野球ゲーム。野球好きな人とかかわりあえる場所が欲しいと思ったのが開発のきっかけ。 スマホでプレイすると短い距離からスピードのある球が投げ込まれるため、かなり難しく感じてしまう。 現状、1人対戦しかできないため、2人でオンライン対戦できるようにするのが伸びしろ(WebSocketなど使えばできる...はず)
アピール今週分と歴代分のランキングによって、他の人と関わり合えるような機能を作成した。 「バットとボール」「ボールと盤」などの当たり判定には、三角関数やベクトルを利用してより厳密な当たり判定を行うようにした。
メジャーリーグの順位表をツイートするTwitter bot
サイトhttps://twitter.com/mlbbot2
開発時期2020年8月
使用技術C#, AWS Lambda, Twitter API, GitHub Actions
コメントメジャーリーグの試合のあった日に順位表を教えてくれるTwitter bot。 Lambdaを使用してサーバレスな環境を日次で動かしている。 デプロイを手動で行なっているため、自動化やAWS環境はIaCな形で管理できるようにするのが技術的伸びしろ。 試合がない日にはツイートしないように制御をかけている。 前年にはLINE botを使用して開発を行なっていることもあり、この頃bot開発をとても楽しんでいた。
アピールTwitterアカウントさえフォローしておけば、自分から「メジャーリーグ 順位」など能動的に検索せずとも 順位表を教えてくれるようになっており、比較的気軽に使える。
トイレのある近くのコンビニ検索・画像内の文字を指定の言語に翻訳するLINE bot
サイトhttps://line.me/R/ti/p/%40244gzids
開発時期2019年9月〜11月(以降、たまにメンテナンス実施)
使用技術LINE Messaging API, Python, Heroku(リリース当時), Render(Heroku無料枠廃止に伴い使用), Google Vision API, Google Places API, Firebase (Firestore), Google Apps Script
コメントLINEから位置情報を送ると近くのコンビニ(トイレ付き)を表示して、画像を送ると画像内のテキストを翻訳してくれる。 もともと、近くのレストラン検索Botとして開発を行なっていたが、ホットペッパーのAPI提供が終了してしまったため別路線に切り替えた。 代替としてコンビニ検索を入れている。(ただ検索するだけではGoogleマップと同じになってしまうため、差別化のためにトイレ付きのコンビニを検索するようにした。) ユーザ管理をLINE側で行ってくれるのがとてもありがたい。
アピール開発当時、画像の文章を翻訳するサービスがなかったため(少ないながらも)ユーザさんから重宝してもらっていた。 今は、Google翻訳が画像対応できてしまったようで、あまりこのBotで翻訳するメリットがなさそう...。 (技術的なアピールとして)翻訳部分でGoogle翻訳APIを使用してしまうと料金がかかってしまうため、翻訳はGoogle Apps Script(GAS)側で行い無料で翻訳を実現している。 (GAS側でAPIのエンドポイントを公開できるため、自作したGASの翻訳用のAPIを叩いている。)
Shooting Game
サイトhttps://shooting-f0o5.onrender.com/index.html
開発時期2017年1月〜3月
使用技術JavaScript, Render
コメント1分間、球から逃げ続けるシューティングゲーム。大学3年生の時に初めてHTML・CSS・JavaScriptを触った時に作ったもの。 クオリティ的な問題はたくさんあると思うが、当時は結構真剣に作っていた。
アピールRenderを使用してサーバコスト・デプロイコストをかけずにデリバリーできるようにした。

開発経験

2023/10/28 現在

業務で扱ってきた主な技術スタック

★★★★☆
Salesforce (Apex, Lightning Web Component, Aura Component, Visualforce, プロセスビルダー, フロー, 第2世代管理パッケージ)
★★★☆☆
Node.js, TypeScript
★★☆☆☆
C#, Vue.js
★☆☆☆☆
SQL Server, Jenkins, Ruby on Rails, Datadog, Redis

※Salesforceに関して
Apex…JavaライクなSalesforce独自のプログラミング言語
Lightning Web Component…Vue.jsライクなSalesforce独自のUIフレームワーク


これまで経験した主な開発内容と自分が行ったこと

Salesforce上での自社プロダクト立ち上げ

時期:2021年3月〜2022年5月

詳細

担当プロダクト・担当した開発範囲

  • ガントチャートアプリケーション
    • 立ち上げ期…技術選定・設計(DB・クラス・画面)・実装
    • 拡大期…チームマネジメント・設計(DB・クラス・画面)・コードレビュー
  • 工程管理アプリケーション・販売購買管理アプリケーション…設計(DB・クラス・画面)・実装・コードレビュー
  • 倉庫管理アプリケーション…コードレビュー

特に力を入れて取り組んだこと

開発の仕組みづくり
  • Prettier・ESLintの導入…「コード品質の向上」「コーディング規約の自動適用によりコードレビュー負担の軽減」「プロジェクト初期段階でlinterによる変更の影響が小さく比較的導入コストが小さい割に効果は大きいと見込んでいた」ことが導入理由
  • git-flowにもとづいたブランチシステムの策定…ソース管理不備による不具合・開発スピード低下・パッチバージョンが当てられないなどビジネスへの影響が発生しており、それを防ぐために実施(こちらのような図にブランチ管理のルール・フローを全て書き出して、社内開発者へ認識共有することで対応)
  • CI/CDパイプラインの構築(Jenkinsで実現、マージ時の自動テスト・社内環境への自動デプロイ・ビルド失敗時のチャット通知)…手動ビルドではビルド作業が属人的となり、またバグの検知に遅れが生じており開発スピードの低下・品質低下が発生していたが、それらを防ぐために実施(CI/CDに関する開発内容をこちらの図にまとめて社内開発者へ共有)
  • コードレビュー・レビュアーの育成…自分がコードレビュー時によく見るポイントをコーディング時に大切にしているポイントとしてまとめて、社内開発者にも共有して実施
  • 開発チームのスキルアップ(社内勉強会でのスピーカーとして知見の共有)
    • Jenkinsによる開発自動化
    • git-flowにもとづいたブランチ管理の方法
    • コミットやコード内のコメントを書くときのポイント(こちらを参照)
    • 技術的質問を行うときのポイント(質問時に大切にしているポイントを参照)
  • 開発用データの自動生成…開発中に開発環境上で、開発者によって動作確認するデータが異ならないようにどの開発者も同じデータで動作確認できるようにするため、またコマンド一発でデータ作成することによる開発スピード向上のために実施(第2世代管理パッケージを使用した開発を行っていたため、こちらを参考に仕組みを構築)
自分自身の開発業務(設計・コーディング)
  • 「大まかな処理の流れは似ているが、細かい個別機能の実装内容が異なる」機能が複数あり、それらの機能に対してストラテジーパターンを使用して開発…できるだけコードの可読性の向上や疎結合の実現ができるようにと考えて使用(実装例はこちらを参照)
  • 大量データを扱う際にSalesforceの制限に抵触しないような設計・実装…SalesforceでApexの一括処理を使用して、トランザクション分割を実装
  • 製造業というドメイン領域を把握した上での設計・実装…工場見学・書籍での学習・社内のbiz側のメンバーへのヒアリングなどをもとに自分自身でこちらのような図にまとめて、お客様業務を理解した上で俯瞰的に開発を実施
海外開発者もいる中でのコミュニケーション
  • プログラムの状態や実装内容を、シーケンス図やクラス図を用いて視覚的に伝達…リモートワークということもあり、口頭・テキストのみのやり取りでは認識齟齬が起きることを懸念して、視覚的な情報を使用して意思疎通を実現
開発フェーズに応じた開発の進め方
  • 立ち上げ期(0→1の開発)では、お客様にプロダクトをいち早く認知してもらい、作っているものの方向性が正しいことを意識しながら「小さく早く作って、改善する」を念頭に開発(4プロダクトの開発に関わっていたが、特に1プロダクトに関して立ち上げ期の開発者が自分1人の状態で、毎月バージョンアップして開発を遂行)
  • 拡大期(1→10の開発)では、できるだけ技術的負債の解消を行うなどプログラム的な品質を高めつつ開発を行うことを意識、また開発人員が増えることに備えて開発の流れや現状の実装状態に関するドキュメント整備も意識

生産管理パッケージのスクラッチ開発

時期:2020年6月〜2020年11月

詳細

担当した開発範囲

詳細設計(クラス・画面)・コーディング

特に力を入れて取り組んだこと・学んだこと

チームの開発生産性向上
  • コード自動生成ツールの作成…コードの書き方がどの機能も大まかに似通っている・同じような処理を開発者ごとに異なった書き方になっているという状況であったため、基本的なソースコードは自動生成できるようなツールを作成 (技術としてはRuby, C#, Mustache, スプレッドシートを使用し、実績としては開発時間が3分の1に短縮されたものあり)
  • 生産性向上ツールは、自分だけでなく他メンバーでもメンバーでも保守できるように、できるだけコードを書かずにシンプルな作りのツールを作成 (初めはスプレッドシートなどで数式のみを使用するような簡易的なツールからスタート)
シニアメンバーから技術的に参考にできる部分の吸収
  • フロントエンド・バックエンドの技術習得
  • DIの使用
  • 「良いコード=高可読性・高凝集度・疎結合なコード」であることの認識
  • 技術的な質問の仕方の認識(大切だと思った点を質問時に大切にしているポイントとして個人的に記載)
  • フロントエンドからバックエンドに対する通信回数は「原則、1トランザクションにつき1通信」の認識

新人開発研修の講師(新人6名の教育・育成)

時期:2020年3月〜2020年5月

詳細

大まかな流れ

  • 研修内容(講義)の企画
  • 講義資料・課題の作成
  • 講義実施
  • 課題のレビュー・フィードバック
  • 振り返り

意識したポイント

  • 開発用語の身近なものへのたとえ…プログラミング未経験者もいる中での研修となっており、技術的な言葉を身近なものに置き換えた方が理解しやすいと考えたため (例:変数=データを入れる箱、非同期処理=料理で肉を炒めつつ同時並行で野菜を切る、など)
  • 各単元の学習によって「作れるもの」などゴールをあらかじめ伝達…「これからどのようなプログラムを作成するのか」よりも「これからの研修でどのような機能をつけることができるようになるのか(例:お天気アプリを作れるようになるなど)」を最初に伝達、また講師側であらかじめ作成したものの画面上でのデモを実施 (プログラミング未経験者の場合、プログラムの内容を最初に伝えられてもイメージがわきにくいと考えたため(自分がもともとそうだった))
  • 資料には、文字よりも図など視覚的情報を多用…リモート環境下での研修となり、基本的に画面越しで研修を行なっていたため、認識合わせや技術的なイメージが湧きやすいように図や絵を多用

Salesforce上での名刺読み取りアプリ・送り状作成アプリの開発(入社直後の新人研修)

時期:2019年4月〜2019年5月

詳細

新人研修の最後に、自ら作るものを企画・設計・製造・テストを行う機会があり、以下の2つを作成

名刺読み取りアプリ

  • 開発理由…社内の営業部がSalesforceを使用して商談管理を行っていたが、名刺管理は別のアプリケーションを使用していたため、名刺管理と商談管理を別々で行っていた。(名刺管理アプリで登録した顧客情報と同じ情報をSalesforceにも手入力で登録していた) データの2重管理の防止や手入力の手間を省き、Salesforce上での名刺管理も可能とするためにこのアプリケーションを作成。
  • 使用技術…Salesforce (Aura Component, Apex), Google Cloud Vision API

送り状作成アプリ

  • 開発理由…当時の社内の送り状作成は、営業担当者ごとにエクセルが用意されており、担当者自身のエクセル上で顧客名・顧客の会社名・送付物などを手入力で毎回書き換えて作成していた。しかし、商談管理として使用していたSalesforce上に顧客情報が存在していたため、Salesforce上の顧客情報からクリックのみで送付状を作成できれば業務効率が上がると考えてこのアプリケーションを作成。
  • 使用技術…Salesforce (Aura Component, Apex), Google Spread Sheet API

このサイト内への要望などございましたら、GitHubのIssuesを登録していただけますと幸いです。
© 2024 shin4488