2019 December 21st, Saturday

新卒が入社半年で社内サービスをリリースしてエンジニア楽しいってなったお話

ポエム

Classi Advent Calendar 22 日目は、新卒で Classi に配属され、エンジニアをしている@ruru8 がお送りします。

今回お話するのは Classi の社内研修のお話。からのその過程で作成した Rails アプリケーションのお話です。 作成したアプリケーションは『Classi BookBook(クラッシーブックブック)』と称し、社内で多くの人に利用してもらえるサービスとなりました。 なんの経験もスキルもない新卒エンジニアがいったいどのようにして社内で親しまれるサービスを作ったのか、自分の中での振り返りの意味も込めてお話したいと思います。

Classi BookBook って?

社内での書籍購入を管理するアプリです。 image.png 書籍一覧で登録されている書籍を見ることができ、ステータスでその書籍の状態を確認します。 管理者によって書籍が購入されたら、購入者がステータスが購入済みに変更します。

左のサイドバーから検索をして該当の申請がない場合は右上の購入申請から購入したい本を申請します。 image.png

以前はスプレッドシートによって書籍購入が管理されていました。

きっかけ

社内研修では作成するサービスを自由に考えられる、というものでどうしようかなぁと考えていたところ、メンターであった@hailong さんに「現在の書籍購入がスプレッドシートで管理されていてちょっとわかりにくい」というお話をいただいて、「せっかくならこれ題材にして研修でサービス作って上手くいったら実際に使っちゃおうよ」という話になりました。そんな自分なんかが社内利用とはいえみんなが使うサービスを作っていいの!?と思いながらも、自分で作ったものを使って喜んでくれる人がいたら嬉しいかも、と思い割と燃えました。

研修で作る

「ゼロからわかる Ruby 超入門」の著者であるigaigaさん、12/21 の TokyoGirls.rb で登壇されたただあきさんの元で、万葉さんの研修カリキュラムを使用して研修を行いました。詳しい研修内容は@yukoono の 4 日目(Classi の新卒エンジニア向け研修について)、@willsmile の 16 日目(Classi エンジニア新人研修での学び方の学び)の記事にあるのでぜひ見てみてください。

カリキュラムを通して、サービスの機能作成から細かい疑問点を丁寧に教えもらえ、ただ「サービスを作る」でもただ「教わる」でもなく、「作りながら教わる」ということをさせてもらいました。実際の業務の中でわからないことへの理解を深める時間というのはそんなに取れるものではないと思うのでとてもありがたかったです。

一番がんばったところ

カリキュラムのSTEP24に「ラベル機能を実装しよう」というものがあります。 購入したい書籍にラベルをつけられるようにして、より検索性を高めよう!と思い実装を始めました。

書籍登録時のラベル項目に「Ruby/Rails/プログラミング」と入力すれば、既に存在する Ruby と Rails はそのまま結びつけ、まだ存在しないプログラミングというラベルは新しく作られ、結びつけられる、という実装にしたいと考えました。 この時初めて、transactionに触れ、初心者の私にとって一番苦労した実装でした...。 image.png conversasion が一つだけ多すぎる...。この実装でigaigaさんとただあきさんにたくさんのことを教わった証拠ですね。ここでの学びはまた別の機会に詳しく共有できたらと思います。

実際のコードはこちら(create のみ)

# book_controller.rb
# POST /books
  def create
    @book = Book.new(book_params)
    @back_url = params[:book][:back_url]
    labels_name = params[:book][:labels_name]
    begin
      ActiveRecord::Base.transaction do
        @book.save!
        Label.save(@book, labels_name)
      end
    rescue ActiveRecord::RecordInvalid => e
      render(:new) && (return)
    end
    redirect_to @back_url, notice: '登録しました'
  end

書籍登録とラベル登録を transaction にしました。

 # label.rb
  def self.save(book,labels_name)
    raise ActionController::BadRequest if labels_name.nil?
    labels_list = labels_name.split('/')
    labels_list.each do |label_name|
      label = find_or_create_by(name: label_name)
      book.labels << label unless book.labels.include?(label)
    end
    book.save!
  end

labels_name/で分割し find_or_create_by で想定の実装ができました。 (find_or_create_by を知らず、最初一生懸命 if で分岐していたので、めちゃくちゃ便利だなと思いました。)

実際の挙動はこちら Image from Gyazo

利用開始と研修卒業

アプリケーションを完成させ AWS でのデプロイを行い、そして社内利用を開始しました。 (AWS も初めてで色々ありましたが今回は割愛) 社内利用の開始と同時にわたしは研修を卒業することになりました。研修卒業時にはigaigaさんが slack で皆さんにお知らせしてくれます。このたくさんの装飾と皆さんのリアクションがめちゃくちゃ嬉しい。

image (4).png

利用開始してから嬉しかったこと

エンジニア以外の人の利用

以前は技術書の購入申請をするためのエンジニアさんの利用がほとんどで、そもそもそのスプレッドシートがあること自体知らなかったという人もいました。BookBook の利用を開始してから、多くの人に書籍購入管理の存在を認知してもらえ、エンジニアではない方の利用も格段に増えました!画面に沿って申請すればいいだけでわかりやすい、と言っていただけたりもしました。嬉しい限りです。

ラベルの活用

こだわりを持って作成したラベルの反響が一番大きく、ラベルのおかげでめちゃくちゃ検索しやすい!と言っていただけました。こだわった分、より一層嬉しいです。自分の想定では書籍情報をラベルで登録するだけかと思っていたのですが、中には所属部署、所属チームのラベルを作成して登録している方もいて、そんな使い方もあったのか!と気づかされました。自分の想定以上の活用をしていただけていて、とてもありがたいです。

改修案や PR をもらえる

わたしの知識や力量が足りなかった部分を、先輩のエンジニアさんが issue として出してくれたり、実際に改修をして PR を出してくれたりもしました。やはり自分だけでは気づけないところがあって、そこにアドバイスをもらえることで自分自身まだまだ成長できる部分があるんだな、と感じました。 また、いただいた改修案をわたし自身で修正するだけではなく、9 月に入社して同じく社内研修を受けた新卒の子も改修をしてくれました。研修を終えチーム配属の1つ前のステップとして、BookBook の改修を通してプロダクト開発の一連の流れを学ぶ目的で行なってもらいました。これからの新卒の方達の学びの場にもなれたらいいなと思います。

まとめ

知識も経験もなかった自分にとって、1 からアプリケーションを作成できた!という経験はすごく自信になりました。Web サービスのプログラミングがしたい、と思ったらまずは何か簡単なものでもいいから実際に作ってみる、というのを強くお勧めしたいです。

また今回は社内で利用する、ということで「どうやったらみんなが簡単に使えるか、どうしたら使いやすいと思うか」に重点を置いてアプリケーションを作成していました。これを「ユーザービリティ」って言うんですね。アプリケーション作成の中で、自分はエンジニアとして「コードを書いて想定通りに動かす」ことに楽しみを感じ、作ったものを使った人が「使いやすいと喜んでくれる」ことに嬉しさを感じるということに気づきました。それまではコードを書いていれば楽しい、だけだったのですが、使う人がいてその人が喜んでくれて初めて自分の書いたコードに意味が生まれるように思いました。そこに入社して 1 年目で気づけたということはとても恵まれていることだなぁと感じました。

今回の経験はこれからのエンジニア人生で壁にぶつかった時にも、この気持ちを思い出して励みにしたいと思います。まだ始まったばかりですが、これからも頑張っていきたいです。

明日の担当は@tomoyanamekawa さんです、お楽しみに。