最短でビデオチャットを開発したい人へ

ビデオチャットを最短で作りたいと考えている人への備忘録です。次の手順に沿って開発すると4時間程度でビデオチャットを開発できます。

  1. WebRTCの概要を把握する
  2. WebRTCのコードを動かしてみる
  3. WebRTCの開発を支援するサービスを利用する

1. WebRTCの概要を把握する

まずはWebRTCについての概要を把握しておくと、実装するときの理解が深まります。まずは、次の記事を読んでください。

同じタイトルですが、Qiitaのこの記事もわかりやすいです。

2. WebRTCのコードを動かしてみる

上記の記事を読んだら、早速コードを動かしてみましょう。コードを実際に動かしてみることで、着実にWebRTCの概念を理解していくことができます。

次の記事で簡単にPCのカメラの映像をブラウザに表示できることが体感してください。

次の記事でシグナリングの流れを掴みましょう。

3. WebRTCの開発を支援するサービスを利用する

本格的なビデオチャットを開発するのはなかなか大変です。その開発を楽にしてくれるサービスが世の中に存在します。私がおすすめするのはSkyWayというサービスです。このサービスを利用することでNAT越えなどの仕組みを自分で実装せずにすみます。日本語ドキュメントが整備されており、サービス自体も無料で試すことができます。

SkyWayを利用するにあたっては、次のスライドが参考になります。

余談ですが、WebRTCのライブラリであるPeerJSはメンテされてないので使わない方がよいです。

デュアルスイーパーカスタムのフジツボスポーツクラブの立ち回り(ガチエリア編)

スプラトゥーン2のデュアルスイーパーカスタムのフジツボスポーツクラブの立ち回り(ガチエリア編)を解説します。

フジツボスポーツクラブはデュアルスイーパーのような射程の長い武器は戦いづらいステージです。というのも、高低差が多く平らなスペースが少ないからです。塗り状況が悪い中で無理して中央のエリアに出て行ってもすぐに倒されてしまいます。

デュアルスイーパーカスタムのフジツボスポーツクラブの立ち回り(ガチエリア編)

デュアルスイーパーの強ポジは自陣左側のスポンジです。スポンジを膨らませて、そこから中央高台にスプラッシュボムを投げます。このスプラッシュボムがかなり効果的です。というのも、エリアのルール上、中央高台には多くのイカが集まるので、スプラッシュボムが当たりやすいのです。また、自陣左側に敵が侵入してくることは少ないのでデスを抑えることができます。

数的優位がとれるまではスポンジの上からスプラッシュボムを投げる。数的優位が取れたら、中央に出て行ってエリアを押さえる。この動きができれば勝てます。

オススメのギア

オススメのギアはサブ性能アップとサブインク効率アップです。サブ性能アップをつけると、スプラッシュボムの飛距離が伸びるため、より遠くの敵までボムが届くようになります。また、サブインク効率アップでより多くのボムを投げることができます。

空いたスペースには、インク回復アップとスペシャル増加量アップを積んでいます。これは、スプラッシュボムを投げる回数を増やすためとスペシャルのアメフラシの回数をあげるためです。アメフラシは相手の前線を強制的に下げさせることができるため、エリアの打開時にうってつけのスペシャルです。

1つのMTGが午前中をダメにする

基本的に、予定があることがわかっている時は、何も仕事を終わらせられません。時計を見て「1時間後に会議があるから、この大事な仕事はまだやらないほうがいいな」と思ったり、1時間を20分くらいに感じるせいか、一番小さな仕事ですら無意識のうちに先延ばしにします。

生産的な1日は「予定を入れすぎない」ことからはじまる

30分後にMTGが予定されているだけで次の仕事をやる気がしなくなります。中途半端にやるくらいなら、MTGが終わってからやろうと思うからです。そして、MTGが終わると何だか疲れてしまい、少し休憩してからやろうと思います。さて、休憩もしたので仕事に取り掛かったのもつかの間、昼休みになります。このような感じで午前中に1つMTGが入っただけで、ほとんど生産的なことができずに午前中が終わってしまいます。たった30分のMTGが午前中をダメにしてしまいます。

このMTGのように、それ自身は些細な時間でも与える影響は大きいものです。その影響についても考える必要があります。

SetterとBuilderの使いわけ

先日、「SetterとBuilderはどのように使いわければいいのか?」という質問を受けました。なかなかよい質問ですね。Builderを使うとクラスのインスタンスを柔軟に作ることができます。Builderを使ったサンプルコードです。

1
2
3
4
User user = User.builder()
.lastName("山田")
.firstName("太郎")
.build();

Builderを実装したUserクラスのサンプルコードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class User {
private final String lastName;
private final String firstName;

User(String lastName, String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}

public static UserBuilder builder() {
return new UserBuilder();
}

public static class UserBuilder {
private String lastName;
private String firstName;

UserBuilder() {
}

public UserBuilder lastName(String lastName) {
this.lastName = lastName;
return this;
}

public UserBuilder firstName(String firstName) {
this.firstName = firstName;
return this;
}

public User build() {
return new User(lastName, firstName);
}
}
}

Setterを使うと次のようになります(実装は省略)。

1
2
3
User user = new User();
user.setLastName("山田");
user.setFirstName("太郎");

Setterの問題点として、インスタンスの状態を変更してしまうことがあります。イミュータブルな実装にする場合、原則としてコンストラクタで値は設定するべきでSetterで変更するべきではありません。

では、Setterではなくコンストラクタで設定するようにしましょう。引数が少ないうちは問題がないのですが、次の例のように引数の数が増えてしまうとコードが煩雑になってしまいます。

1
2
3
// 姓、名、年齢、血液型、国が引数のコンストラクタの例
// 年齢と血液型は不明だが、nullを指定する必要がある
User user = new User("山田", "太郎", null, null, "日本");

そこで、Builderを使うメリットが出てきます。Builderを使えば柔軟にパラメーターの設定が行えるようになります。

1
2
3
4
5
User user = User.builder()
.lastName("山田")
.firstName("太郎")
.country("日本")
.build();

SetterもBuilderもやりたいことはオブジェクトにパラメーターをセットすることです。Setterを使うとオブジェクトの状態を変更してしまうことになります。イミュータブルな実装かつ柔軟にパラメーターを設定したい場合はBuilderを使いましょう。

そろそろlombokから卒業しようと考えています

便利なlombokですが、そろそろオワコンな感じがしています。理由はJavaのアップデートに追従することが困難になってきているからです。詳しくはLombok の Java9以降対応の記事に書いてあります。実際、Java9対応も遅かったですね。lombokを使い続けると、Javaのアップデートに追従していけなくなる未来が想像できます。

Spring Bootも2系からはlombokは使っていませんね。

lombokは便利ですが、別に無くてもなんとかなるライブラリなので、あえてこれから使う選択をする必要はないと思います。