B-Teck!

お仕事からゲームまで幅広く

【本/アジャイル】いちばんやさしいアジャイル開発の教本 を読んだ

発売日に買ったものの長らく積んでいた本。
新しい職場がスクラム開発を実践していたこともあり、このタイミングで読んでみた。

アジャイル界隈は熱気と活気があり、盛り上がっている界隈であることは観測しているものの、門外漢には踏み込みづらく、外から見たときにそのプラクティスの有効性もよくわからない、という気持ちがあった。
それは実践しているプラクティスがある種の「カタ」としてそのまま取り入れなければいけないという誤解であったり、インクリメンタルに作り上げる成果物にだけフォーカスしてしまい、組織の成長という観点が見えていないせいでもあったと思う。

Chapter1 アジャイル開発の世界
Chapter2 なぜアジャイル開発なのか
Chapter3 アジャイル開発がもたらす変化
Chapter4 アジャイル開発の中核にあるコンセプト
Chapter5 小さく始めるアジャイル開発
Chapter6 上手に乗りこなすためのカイゼン手法
Chapter7 アジャイル開発の理解を深める
Chapter8 アジャイル開発はあなたから始まる

本書では、上記に引用した目次にあるように、

  • アジャイルとはなんぞやという話
  • どういった理念を中心に置いているか
  • どういったプラクティスがあるか
  • 既存の手法とどう違ってどう住み分けるべきなのか

が網羅的に書かれている。 この構成がわかりやすく、頭に入ってきやすかった。

ざっくり一言でまとめてしまえばアジャイル開発というのは 「不確実性のあるプロジェクトに適応する自己成長し続ける組織を作ろう」 ということなのかも。
当初「カタ」であると思っていたプラクティスは組織の課題や構成によって少しずつ作り変えて良いものであったし、成果物と一緒により良い組織の成長を作り上げることを考えていかなければならないんだと言うことを認識出来た。
ふりかえりを重視する文化というのが、ここに来てようやく腹落ちしたなという気分。

ただ、なんとなくこの一冊で実践までつなげるのは難しいなと感じた。手法や取り入れ方は紹介されているものの、どちらかというと理念・思想を中心に伝えて、実践者が理解して、それを他者に説明できるという状況に持っていくための本なのかも。
個別のプラクティスの実践には何らかの追加の書籍や調査が必要な気はする。ただ、一番最初にこの本を手に取ることによって、どの方向に踏み出すべきなのか、何を大切にするべきなのかを念頭に置いて歩み始められる良書だと思う。

【振り返り】2021年7月

今まで年一回とかイベントごとのときだけ振り返りをしていたんですが、自分のメモがてら月々の活動などを振り返っていこうと思います。

学習

今月やったこと

所感

今月は新しい会社に入社して、色々見て学ぶことの多い期間でした。
先月までの心身の損耗を徐々に回復してきているのか、本を読んだりゲームをしたりができてきて一安心。
仕事はまだまだわからないことも多いので頑張らなきゃな〜という感じです。
入社前からちょっとずつ勉強していたScalaは、読めなくはないけどもっとちゃんとやってみなきゃなというところ。
また、これまではちゃんとしたスクラム開発を行ってこなかったので、本を読んだりして基礎的な部分を勉強したりしました。
来月以降はScalaを業務でキャッチアップしつつフロント周りの技術を触っていく予定。

【Scala/Play】PLAY2 + SLICK ハンズオンをやった

Play 2.5.x + Slick 3.1.x の手順をベースに「Play 2.8.x + Slick 3.3.2+(Play Slick 5.0.x)」の組み合わせでやってみた。
実装したものはこちら
バージョンを変えたことによってそのまま動かなかった箇所がいくつかあったので、メモとして残す。

プロジェクトの作成

Playの雛形作成は下記で2.8系を選択。

$ sbt new playframework/play-scala-seed.g8 --branch 2.8.x

build.sbt の記述の追記も合わせて変更している。

// ↓↓↓↓ここから追加↓↓↓↓  
libraryDependencies ++= Seq(  
  "com.h2database" % "h2" % "1.4.193",  
 "com.typesafe.play" %% "play-slick" % "5.0.0",  
 "com.typesafe.play" %% "play-slick-evolutions" % "5.0.0"  
)  
// ↑↑↑↑ここまで追加↑↑↑↑

DBの準備

  • H2がJDK11では動かず、JDK1.8環境に戻す必要があった
    • イントロダクションではJDK1.7以降と書いてあったので油断してた…

DB接続の設定

slick.dbs.default.driver がdeprecatedになっていたのでslick.dbs.default.profileに変更

slick.dbs.default.profile="slick.jdbc.H2Profile$"  

実装

UserControllerの雛形

package controllers

import models.Tables._  
import play.api.data.Forms._  
import play.api.data._  
import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider}  
import play.api.mvc._  
import slick.jdbc.H2Profile.api._  
import slick.jdbc.JdbcProfile  
  
import javax.inject.Inject  
import scala.concurrent.{ExecutionContext, Future}

class UserController @Inject()(implicit ec: ExecutionContext,
                                val dbConfigProvider: DatabaseConfigProvider,
                                components: MessagesControllerComponents) extends MessagesAbstractController(components)
  with HasDatabaseConfigProvider[JdbcProfile] {

  /**
   * 一覧表示
   */
  def list = TODO

  /**
   * 編集画面表示
   */
  def edit(id: Option[Long]) = TODO

  /**
   * 登録実行
   */
  def create = TODO

  /**
   * 更新実行
   */
  def update = TODO

  /**
   * 削除実行
   */
  def remove(id: Long) = TODO

}

  • play.api.libs.concurrent.Execution がdeprecated
    • scala.concurrent.ExecutionContext へ修正
  • play.api.i18n.MessagesApi がdeprecated
    • MessagesControllerComponentsMessagesAbstractController へ修正
  • slick.driver.JdbcProfile がdeprecated
    • slick.jdbc.JdbcProfile へ修正

JsonControllerの実装

package controllers

import controllers.JsonController._
import models.Tables
import models.Tables._
import play.api.db.slick._
import play.api.libs.functional.syntax.{toFunctionalBuilderOps, unlift}
import play.api.libs.json._
import play.api.mvc.{AbstractController, Action, AnyContent, ControllerComponents}
import slick.jdbc.H2Profile.api._
import slick.jdbc.JdbcProfile

import javax.inject.Inject
import scala.concurrent.{ExecutionContext, Future}


class JsonController @Inject()(implicit ec: ExecutionContext, val dbConfigProvider: DatabaseConfigProvider, cc: ControllerComponents)
  extends AbstractController(cc) with HasDatabaseConfigProvider[JdbcProfile] {

  /**
   * 一覧表示
   */
  def list = TODO

  /**
   * ユーザ登録
   */
  def create = TODO

  /**
   * ユーザ更新
   */
  def update = TODO

  /**
   * ユーザ削除
   */
  def remove(id: Long) = TODO
}

変更点はUserControllerの修正とほぼ同じだが下記のみ異なる

  • Controller が利用できなくなっている
    • ControllerComponentsAbstractControllerへ修正

参考