怠惰系エンジニアのメモ帳

勉強した内容をメモしていきます。解説ブログではないので悪しからず。

「プロになるためのWeb技術入門」を読んだ

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか を読んだ。

きっかけ

別の技術書を買いにいったら、偶々目についたので一緒に購入。
Amazonの「欲しいものリスト」にも追加しており、内容的にサクッと読めそうだったので。

物量的には300ページなく、3時間程度で読み終えた。

感想

Webシステムの開発にあたり、知っておくべき知識が分かりやすく記載されており、 1年目の頃に読みたかった1冊。

Amazonでの評価が良いのも納得の内容。
HTTPをはじめ、アーキテクチャやセキュリティなどが歴史的背景なども交えて網羅的に解説されている。

個人的に注釈が丁寧で凄くいいなと思った。

「Webを支える技術」と併せて読むといいかも

自分は1年ほど前に「Webを支える技術」を読んでいたが、先に「プロになるためのWeb技術入門」を読んでから「Webを支える技術」を読むといいかなーという感じ。

今度弊社の新人さんにお勧めしよう。

RandomStringGeneratorでランダムな文字列を生成する

commons-textRandomStringGenerator を使用してランダムな文字列を生成してみた。
というのも、commons-langRandomStringUtils が非推奨になったらしい。

RandomStringUtils (Apache Commons Lang 3.6 API)

確かに @Deprecated ついてる。

使い方

今回は半角英数のみで、15文字のランダムな文字列を生成することを目標にする。

import org.apache.commons.text.RandomStringGenerator;

public class Main {

    public static void main(String[] args) {

        for(int i = 1; i <= 10; i++){
            System.out.printf("%02d回目;%s%n", i, generateRandomString(15));
        }

    }

    // ランダムな文字列を生成する
    public static String generateRandomString(final int length) {
        return new RandomStringGenerator.Builder()          // ビルダーを生成
                .withinRange('0', 'z')                      // 生成する文字の範囲を指定
                .filteredBy(Character::isLetterOrDigit)     // 生成される文字を抽出する条件を指定
                .build()                                    // RandomStringGenerator をインスタンス化
                .generate(length);                          // 指定した長さの文字列を取得
    }

}

ビルダーパターンや。
結果

01回目;P04ceP8ZVZbNpZG
02回目;ZijxWRc0vM2kVBR
03回目;HyIloW8PZIq95fQ
04回目;d1RM1PeZ3wyofJH
05回目;tCALG28Gmm6TIhN
06回目;cujJSQ5IHcy7qwW
07回目;uWDEFwg8aoo0jlf
08回目;WVQHbT1Mh7ISMGN
09回目;FYpc5hQIzUV9RtJ
10回目;vCfPe5kyqPJVmtw

ちゃんと半角英数のみで生成されている。

また、filteredBy の引数は CharacterPredicate の可変長引数になっているため、 任意の数の抽出条件を指定することができる。

public interface CharacterPredicate {
    boolean test(int codePoint);
}

org.apache.commons.text.CharacterPredicates に、 アルファベットを抽出する LETTERS と数字を抽出する DIGITS が定義されているので、 それを使用するのも手。(内部的には Character#isLetterCharacter#isDigit が使用されているだけ)

new RandomStringGenerator.Builder()
    .withinRange('0', 'z')
    .filteredBy(CharacterPredicates.LETTERS, CharacterPredicates.DIGITS)
    .build()
    .generate(20);

個人的には Character#isLetterCharacter#isDigit をメソッド参照で渡す方が良いのかなと思った。

RandomStringUtils 使ったことなかったので、使い勝手の比較はできないが、 API見る限りだと RandomStringUtils の方が使いやすそうではある。
なんで非推奨になったのか...。

Ruby触ってみた所感とか

ここ2週間程、Rubyを触っていました。
ある程度Rubyの基礎的な部分は知ることができたので、その所感とか書いてみます。 (見返してみるとメチャクチャ浅い感想...)

きっかけ

最近Wantedlyに登録して企業情報を眺めたりしてるんですが、Ruby(Rails)の求人が多いように見受けられました。
「やっぱり世間的にはRailsなのか…」と思い、視野を広げる目的でRubyを触ってみた次第です。(学生時代もRubyは触ろうとしなかったんですよねぇ…)

Rubyを触ってみて

率直な感想としては 普通に楽しかったです。(語彙力)

新しいこと覚えるのって楽しいですね、単純に。
糖衣構文が多く「如何に開発者が楽にコードが書けるか」という点を重視しているように感じました。
特に制御構文周りは種類が豊富で、色々便利そうだなという感じ。

触っててチョット分からない部分もあるので、もう少し調べてみようと思います。

Railsに関しては「rails new」しただけなので何とも言えませんが、 確かにスピードが速い開発ができそうな気がします。 (ファイルやらディレクトリがゴリゴリ作成されてビビリました。凄い。)

ただやっぱり型が欲しい...。

BeanValidationメモ_その2

前回に引き続き、Bean Validationについてのメモ。
今回はカスタムバリデーションについて。

記載内容に間違いなどがありましたら、指摘していただけると幸いです。

カスタムバリデーション

Bean Validationは、ユーザが独自にバリデーターを作成することが可能。
カスタムバリデーターの作成方法は2つある。

1つ目は、既存のアノテーションを組み合わせて作成する方法。
2つ目は、バリデータクラスを自作する方法。

どちらにも共通するのは、独自の制約アノテーションを作成する点。
今回は2つ目の バリデータクラスを自作する 方法のみを記載します。

作成手順

基本的には以下の順番でカスタムバリデーターを作成していくことになると思います。

  1. 独自の制約アノテーションを作成する。
  2. それに対応するバリデーターを作成する。

バリデーターに「どの制約アノテーションと関連があるか」を指定する必要があるので、 先に制約アノテーションを作成します。

続きを読む

BeanValidationメモ_その1

Bean Validationを利用した入力チェックについて調べる機会があったので、備忘を兼ねてメモ。
特に目新しいことは記載していません。

記載内容に間違いなどありましたら、指摘していただけると幸いです。

参考

以下のサイト、書籍を参考にさせていただきました。

環境

今回もSpring Boot。 Bean Validationを利用したいので spring-boot-starter-validation を依存関係に追加する。
spring-boot-starter-validation を追加することで、Bean Validationの参照実装である Hibernate Validator が利用できるようになる。

Hibernate Validator のバージョンは、5.3.5.Final。

続きを読む