ハッカソン合宿制作記①|気軽にコードを共有できるSNSを制作しました

はじめに

エンジニア定例という新人のスキルアップを目的とした勉強会を半年に渡って行ない、その集大成として2泊3日のハッカソン合宿に行ってきました。

本合宿では、4人のグループでそれぞれwebサービスを制作しました。

この記事では、私が所属するグループで制作したサービス「Light Code Review」についてご紹介します。

メンバー紹介

  • 安藤
    合宿の役割:タイムラインのロジック実装
    普段の業務:いわゆる情シス業務
  • 飯塚
    合宿の役割:フロントサイドの実装、技術的なサポート
    普段の業務:ニフティ温泉のWEB開発
  • 中村
    合宿の役割:投稿機能ロジック実装
    普段の業務:メールサービス開発、運用
  • 林口
    合宿の役割:投稿詳細ページのロジック実装
    普段の業務:カスタマーサポートシステムの運用、開発

Light Code Review

「プログラムコードを呟きたい!」と思ったこと、皆さんはありませんか?

ソースコード共有サービスは使うのが大変だったり、汎用的なSNSではそもそもソースコードの共有には向かなかったり……

このような考えから、私たちは短文にソースコードをつけて気軽に投稿できるSNSを作成しました。

心理的なハードルを下げる狙いから、投稿を「続きはこちら」と途中で切るようなことはせず1画面に収まるようにしました。また、1ページで一通り流し見できるようタイムライン形式での表示にしました。

ユーザーの利用目的は知見の共有だと考えていますが、問題の早期発見や、コードを読み合うことで可読性の高いコードを書くノウハウの習得も狙いとしています。

たとえば、文法に不安がある初心者や、特定の処理を短時間で実装して競う競技プログラマ、開発組織内で仰々しくレビューするほどでもないようなレベルのささやかなコードの共有、といった場面を考えています。

逆に長いソースコードを共有するには不向きで、気軽さを重視したためサービス名は「Light Code Review」となりました。

使い方

ログインし、本文・コードを記入して投稿ボタンを押すと投稿されます。

それぞれの投稿には返信件数を表示しています(投稿内容の右下)。

件数が分かれば、新しい返信がきたかどうかも分かりますね。タイムラインで投稿をクリックすると、返信画面に遷移します。

感想やアドバイスなどはここからコメントできます。

ちなみに、ソースコードを載せずに既存のSNSのように投稿することもできます。

技術的なお話

本サービスの機能は会員登録系統とサービス系統の2系統に分かれた構成になっています。

会員登録系統はPHPフレームワークのLaravelに搭載されている認証機能を利用して簡単に実装しているので、ここではサービス系統についてお話していきます。

 

本サービスではタイムライン画面と返信画面の2つの画面から成り、それぞれ投稿機能をパーツとしてを持っています。

ここで投稿機能パーツは基本的に同じ動作をするものですが、タイムライン画面では投稿内容を投稿テーブルに書き込み、返信画面では返信テーブルに書き込んでいきます。

それぞれの画面は同じ1つの投稿機能パーツをincludeしていますが、分岐処理を入れてどちらのテーブルに書き込むのか判別しています。

投稿機能は2つに分けて実装するという案もありましたが、分岐処理を入れて1つのパーツで実装することでメンテナンス時に修繕するファイルが少なく済むように設計しました。

また、それぞれ書き込み先のテーブルを主に読み込んでいますが、付加情報を表示するために書き込み先のテーブル以外も読み込んでいます。

例えばタイムライン画面での返信数表示や、返信画面での返信先投稿内容の表示などがこれに当たります。

他にもユーザー情報テーブルがあり、これは投稿テーブル・返信テーブルが読み込まれるたびに結合し読み込まれ利用されています。

システム設計の経験が浅いメンバーでしたが、本開発合宿で複数のテーブルを跨ぐ処理を設計・実装することができました。

今までの研修や勉強会で学んだことを習得し活用できたため、自身の成長を実感できました。

 

開発合宿の所感

開発できる時間は約1日半と短く、時間との戦いでした。

その中でも、人的リソースのマネジメントがうまくできたと感じています。

強みを活かしたタスク割り振りを意識し、普段の業務で開発をしているメンバーが技術面のサポートに回ることで、他のメンバーの技術力を補いつつ効率的に開発を進めることができました。

一方、普段の業務とは離れた内容での開発だっため知識不足や経験不足が目立ち、勉強会で学んだことをいざ実践に移すと、いくつもの不明点が生じました。

普段は運用業務を担当しているメンバーが多いチームで、Web開発は決して得意分野ではありませんでしたが、チーム開発や技術面での知見を得られたため、とても貴重な経験となりました。

開発は必須要件とエンハンス要件で切り分けて開発していたため、投稿・表示という最低限の機能の実装に留まりました。

SNSとして欠かせないフォロー機能やプロフィール機能など追加開発したいものはまだまだあります。

「形にすることができた」という達成感と、「まだ機能を追加したい」という物足りない気持ちが残る開発合宿でした。

 

おわりに

今回の合宿では以下のような学びを得ることができました。

  • チーム開発は気軽に分からないことを相談し、共有することの重要性
  • 立ち上げから開発までの貴重な経験
  • サポートや実装など、それぞれの強みを活かした担当配置の考え方
  • 運用者目線ではなくユーザー目線での捉え方

勉強会と合宿で学んだことを日々の業務に活かし、更なる成長へと繋げていきたいと思います。