誰でもできるプログラミング

こんにちは。開発担当のマットです。

以前も言ったことがありますが、開発はとても楽しい仕事です。
PCに文字を打ち込むだけで、コンピュータがその指示を従って、面白いものを生み出せます。

でも、一度もプログラムを書いたことがない人は、どこから始まればいいかわからないでしょう。私も長いこと、プログラムの書き方を一切わからなくて、不思議な魔法のようでした。

それで、誰でもすぐに作れるプログラムを紹介したいと思います。

必要な準備

多くのプログラミング・プロジェクトに特殊な言語やコンパイラーのインストールが必要です。今回は、めっちゃ簡単に、ブラウザーとテキスト・エディター(メモ帳など)さえあれば、動くJavaScriptのプログラムを作ろうと思っています。

つまり、特に必要な準備はありません。

始めましょう〜

まずは、テキストエディターを開いて、「Hello」を書きましょう!
終わったら、program.html として保存しましょう!
保存先はどこでもいいです。デスクトップでも問題ありません。

HTMLファイルなので、ダブルクリックすると規定のブラウザーで開かれるでしょう。私の場合、Chromeで「Hello」が表示されます。

これはプログラム?

いや、今やったことは(とても簡単な)ウェブページの作成です。
動的な内容を出力する何かを開発しないと、「プログラム」と呼べないでしょう。

では、それを作りましょう!
現代のブラウザーは JavaScript という言語を解釈する能力を持っています。
Helloの後ろに、Javascriptのコードを書く部分を定義しましょう!これはHTMLタグというものでできます。

書き方は簡単です。
Javascriptのコード部分の開始は <script> で定義する。
Javascriptのコード部分の終了は </script> で定義する。

なお、コード部分にアラートを出す処理を入れましょう!
Javascriptでは、 alert(‘ホゲホゲ’); でできます。 

先程のファイルに以下を書きましょう〜

Hello
<script>
    alert('こんにちは!');
</script>

保存して、ブラウザーをリロードすると、アラートが表示されます!

やった!なんか動き出しましたよ!

基礎の準備ができ、初めてのスクリプトを書きましたので、面白いものを作りましょう!

スプラウティモン

せっかく、スプラウト株式会社のブログなので、スプラウティモンという、モンスター・ゲームを作りましょう!
150匹のモンスターがいて、全部集めることが目標!

150匹のモンスターの名前を決めなければならないことが面倒ので、プログラムで自動にやりましょう。こうやってします。

  1. スプラウティモンの名前のパーツを手動で決める。
  2. 名前のパーツを適当に組み合わせて、名前を作り出す。
  3. その名前をページに出力
  4. それを150回繰り返します。

よっし!目標を設定しました。まずは名前のパーツを手動で決めましょう。
プログラミングで、何かのコレクションを「配列」といいます。
名前のパーツのコレクションが必要ので、まずはpartsという配列を作りましょう。
言語によって、やり方が違いますが、Javascriptの場合は以下です。

Hello
<script>
	var parts = ['ほげ', 'ホゲ'];
</script>

「ほげ」と「ホゲ」で、あまりいい名前作れないので、「ファイヤ」とか「アイス」とかを勝手に決めて、面白さそうなリストを作りましょう。

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
</script>

これでパーツを定義しましたが、プログラムで3つをランダムに組み合わせて、スプラウティモンの名前を決めましょう。

では、ランダムなパーツを選択する方法はちょっとややこしいですが、以下となります。

parts[Math.floor(Math.random() * parts.length)];

 これを完全に理解しなくてもいいですが、「parts配列の中から、最初から、最後までの中、どれかランダムなものを返す」という意味です。

alertで出してみましょう!

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	alert(parts[Math.floor(Math.random() * parts.length)]);
</script>

僕の場合、「メガ」が出ました。リフレッシュする度に、違う名前が出てきます。
ところで、アラートじゃなくて、直接ページに書き出す場合、「document.write」を使えます。それ使いましょう。なお、3つを組み合わせたいので、その行を3回書きましょう。

Hello
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	document.write(parts[Math.floor(Math.random() * parts.length)]);
	document.write(parts[Math.floor(Math.random() * parts.length)]);
	document.write(parts[Math.floor(Math.random() * parts.length)]);
</script>

すると、

なんか面白いですね。
7才の息子に聞いたら、100点満点で「100点」の名前だそうです!(笑)

どうやって150回?

プログラミング言語でループを書く事ができます。
ループとは、何かの作業を繰り返す時に使うものです。
Javascript では、以下のように書きます。

for (i = 0; i < 150; i++) {
    //150回実行したいコード
}

「Hello」をもっと適切な言葉に変えて、
各スプラウティモンの名前の前に改行(HTMLで「<br />」と書く)も入れましょう!

名前のパーツを150回も定義する必要はないので、ループの外で問題ありません。

すプラウティモンのリスト!
<script>
	var parts = ['ファイヤ','アイス','ウィング','ライオン','イシ','デビル','ウルトラ','スーパー','デンキ','パワー','ブリザード','フラワー','ドラゴン','ロック','メガ','ワニ','ドロ','クマ','ヘビ','サメ'];
	for (i = 0; i < 150; i++) {
		document.write('<br />');
		document.write(parts[Math.floor(Math.random() * parts.length)]);
		document.write(parts[Math.floor(Math.random() * parts.length)]);
		document.write(parts[Math.floor(Math.random() * parts.length)]);
	}
</script>

こうすると・・・・

できました!おめでとうございます!
プログラムを書くことに成功しました。

まとめ

今回、とても簡単なプログラムを紹介しました。
よく考えたら、重複の名前がでてくる可能性もあり、「ドロドロドロ」のような変わった名前も出力されるかもしれません(確率が低くても)。
プログラマはこういうことを考慮して、プログラムを柔軟に作らなければなりません。

とても楽しい仕事で、今後も多くのプログラムを作るチャンスを楽しみにしています。

リモートワークをしてみてのいろいろ

こんにちわ。
リエです。

新型コロナウイルスの感染拡大を受けて、#StayAtHome の毎日ですが、現在弊社は完全リモートワークを実施しております。
オフィスではなく在宅で仕事をするということで、仕事をする環境はかなり変わりました。
ということで、リモートワークをしてみて思ったことや気づいたことなどを今回は書いていきます。

そもそも家で仕事ができるのか

はっきりいうとリエ家は仕事に適した環境ではありません。
お家ではリラックスできるようにしているので誘惑がたくさんあります。当たり前ですが、普段は会社に行って仕事をしているので仕事用のデスクもなければイスもない。
数時間であれば仕事できますが、まる1日、それも数ヶ月となると色々弊害がでてきます。
ということで、快適にお家で仕事ができるよう工夫することにしました。

お家で快適に仕事ができるよう工夫したこと

このGoogleさんの記事を参考にさせていただいたのですが、
■上手な「在宅勤務」のコツ
https://cloud.google.com/blog/ja/products/productivity-collaboration/make-work-from-home-work-for-you

私はお家で快適に仕事ができるよう以下のことを実践しました。
・生活リズムを崩さないよう、会社に行くときと同じ時間に起きる
・メンバーに会わないとはいえ、メイクも普段通りきちんとする
・ついつい楽な服装をしてしまいがちだが、普段通りの服を着る
・アクセサリーをつける
・面倒で水分を取らなくなるので、500mlのステンレスマグにお水を入れてPCの横に置く(これはむくみ対策にもなる)
・仕事前にラジオ体操第一・二をして身体を動かし、頭を仕事モードにする。
・1時間に1回は立ち上がり身体を伸ばす。

誰にも合わない日って日焼け止めだけでメイクしないんですよね。。(女性あるあるだと思ってる)服もお家だとラクなパンツとかになっちゃってスカート履かないし。でもそれだと気持ちがシャキっとしないので、誰にも会わないとはいえアクセサリーもつけて背筋を伸ばすことは大事だなと思いました。

あと意外とよかったのが、仕事前にラジオ体操第一・二をすることです。
これはメンバーがSlackでラジオ体操がいいよと書いてたのを見て始めたのですが、私は超低血圧で通勤中に寝ぼけた頭を起こしていたので、ラジオ体操をして身体を動かすことで目が覚め頭を仕事モードに切り替えることができました。

リモートワークで気づいた良いこと

リモートワークしてて気づいた良いことがたくさんあります。
・通勤時間がないのでゆっくり朝ごはんが食べれる
いつも時間なくて食べない日も多かった。

・通勤のストレスがない
これはリモートワークされている方がよく言われていることですよね。

・マスクをしないからリップメイクが楽しめる
外へ行くときは必ずマスクをしているので、リップメイクが楽しめませんでした。でもお家だとマスクをしないので好きにリップメイクできるのが嬉しい。

・カラーメイクができる
メイクネタが続きますが、普段会社に行くときは塗らないアイシャドウが塗れるのが楽しいです。※会社に禁止されているわけではありません。
メンバーとの打ち合わせの時はGoogle Meetを使うのですが、PCカメラはそんなに解像度が高くないので問題なし\(^o^)/むしろ解像度が高くないのでしっかり目にカラーを乗せないと顔色がゾンビです。

・マスクでの肌荒れが減った
毎日マスクをしていると肌荒れませんか?私はマスクの肌荒れにすごく悩まされています(TдT)でもマスクをする頻度が減ると肌荒れの治りも早い気がします。

・日焼けをしない
女性の大敵、日焼けをしないというのは大きなメリットだと思います。


そしてリモートワークになって1番思ったことは、[会社は本当に快適な仕事環境を作ってくれていたということ]です。
普通に思っていたことが普通じゃなかったんだなとしみじみ感じております。
そして国は企業にリモートワークをお願いしていますが、リモートワークができず外で仕事をしている方はたくさんいらっしゃいます。
その方たちのおかげで、日々の暮らしが守られていることを痛感し感謝しかありません。
今自分にできることは体調管理に努め、不要不急の外出は控え#StayAtHome することなので、引き続きリモートワークでしっかりと仕事をしていきたいと思います。

【Solr】Date Mathによる日付表現

はじめに

Solr では、pdate 等の時刻を扱うフィールドに対するクエリで使用できる Date Math という表現が用意されています。「今日からN日前」のような表現を使いたいときに便利です。 この記事ではDate Mathについてまとめました。

通常の日付表現

Solr では日付のフィールドは以下の形式で表現します。

2020-03-22T14:55:29Z

ミリ秒までの精度があるので、小数点表記も有効です。

2020-03-22T14:55:29.123Z

時刻は秒まできちんと表記しなければエラーになります。

ミリ秒よりも小さい桁が書いてあっても受付けますが、無視されます。

エラーになる例

2020-03-22
2020-03-22T14:55Z

Date Math

Date Mathは、特定の時点からの相対的な時刻を指定しやすくするための表記法です。
起点として良く使用される「今現在」を指定するために NOW という Date Math が用意されています。

Date Mathではまず起点となる日付を書き、それプラスN日という形で表記します。
「2ヶ月後」

NOW+2MONTH

「10日前」

NOW-10DAY

「1年後」

NOW-1YEAR

プラス/マイナスの部分は連続して書くことができます。

NOW+1YEAR+3MONTH+5DAY

起点として通常の日付を指定することもできます。

2020-03-22T10:15:18Z+7DAY

丸め表記

スラッシュ(‘/’)を併用することで、「〜の最初」を表現できます。
たとえば現在時刻が2020年3月22日11時22分33秒だとします。

NOW/HOUR

→2020年3月22日11時00分00秒

NOW/DAY

→2020年3月22日00時00分00秒

Date Math と組み合わせて使えるリクエストパラメータ

NOW

NOW パラメータにより、Date Math で記述した “NOW” を特定の日付に設定することができます。 NOW パラメータには、いわゆる UNIX TIME の Long 値を指定します。
NOW パラメータを指定することで、複数のノードにまたがる分散検索での NOW の値を揃えることができます。テストのときにも役に立ちそうです。

TZ

TZ パラメータを指定することで、デフォルト UTC である Date Math の日付計算を別のタイムゾーンとして扱うことができます。

【家で遊ぶ】Javascript で簡易サンプラー

Photo by Kofi Nuamah Barden on Unsplash

Javascript を使ってブラウザの Chrome で鳴らせる簡易サンプラーを作ってみます。

こんなの。

DJブースの隅やイベント会場に置いてあるやつです。

爆発音を鳴らしてみたり、録音機能があったり、パターンを保存して再生する機能が付いてあったり、利用場面に合わせて様々な使われ方をされます。

ビートボックス、リズムマシンとも呼ばれたりします。

Tone.js

今回は、簡易版ということで、音が3つ鳴るだけのサンプラーです。

作成に当たっては、偉大なる Web Audio framework の Tone.js を利用します。

A Web Audio framework for making interactive music in the browser.
https://github.com/Tonejs/Tone.js/

動作デモ

まずは見ていただいた方が早いと思うので、 作ったものを netlify に上げておきました。

netlify.app

Chrome 以外では確認していません。
音が出るので注意。
PC、最近のスマートフォンなら動くと思いますが、環境によってはブラウザの「音声」を許可する必要あり。

やってること

主要部分はこんな感じになります。

!function(){
	Tone.Transport.bpm.value = 80;
	Tone.Transport.loop = false;
	const sampler = new Tone.Sampler({
		'C1' : '/bd.mp3',
		'E1' : '/sd.mp3',
		'F#1': '/hh.mp3'
	}, ()=>{
		console.log('initialized')
	}).toMaster();
	const sound = note => {
		const cell = document.querySelector('[data-note="'+note+'"]');
		sampler.triggerAttackRelease(note, .3);
		cell.style.animationName = 'fade1';
		setTimeout(()=>{
			cell.style.animationName = '';
		}, 300)
	}
	const beatbox = document.getElementById('petit-beatbox');
	beatbox.querySelectorAll('div').forEach(div=>{
		div.onclick = e => {
			sound(e.currentTarget.dataset.note)
		};
	});
	document.body.onkeypress = e => {
		if (e.code === 'KeyA') {
			sound('C1');
		} else if (e.code === 'KeyS') {
			sound('E1');
		} else if (e.code === 'KeyD') {
			sound('F#1')
		}
	}
}();

赤、黄、緑の四角をクリックするか、キーボードのASDでそれぞれ鳴らしたい音が再生されるようイベントリスナーをセットします。

ほぼこれだけです。

ボタンを追加して効果音や音色を設定していけば色々遊べます。

Javascript なので、その気になれば、その場でソースコードごと変更してしまうことも可能です。

(ラグがある場合は音自体の軽量化までやらないと駄目かも…)

家で遊ぶ

Tone.js には様々な API が用意されているので、頑張ればエフェクターやシーケンサーとしての機能も追加できます。

Tone.js っょぃ。

逆に、Tone.js のない標準の Web Audio API は、かなりしんどいです。
「シンプルなサイン波を440Hzで3秒間ほどほどの音量にして鳴らす」だけでもう再起不能に陥り寝込んでしまいます。

おうちで自家生産、サンプラーを作って遊んでみるのはいかがでしょうか。

おうち時間で爆弾解除をしてみた話

こんにちは。デザイナーのMです。

新型コロナウィルスの影響で、弊社は約1ヶ月前頃から在宅での勤務体制となっています。
プライベートでも、週末は近所を少し散歩するぐらいしか外出をしておらずほとんど家の中で過ごす、いわゆる「おうち時間」を実践しています🏡
ただ、1ヶ月近く家の中で過ごしていたらさすがにやることも少なくなってきます。。
「ウォーキング・デッド」という海外ドラマをずっと観ていたのですが、それも最新エピソードまで追いついてしまい次に観るのを何にしようか悩んでいるところです😂

そんなとき後輩デザイナーが日報に、あるゲームを紹介しているのを読んで興味が湧き、やってみようと思いました。

それがこちら、
「完全爆弾解除マニュアル:Keep Talking and Nobody Explodes

https://keeptalkinggame.com/ja/



タイトルだけで面白そうじゃないですか?(私だけでしょうか👀
PS4やNintendo Switch、PCのマルチプラットフォームに対応しているインディーゲームです。

どんなゲームか簡単に説明すると、『2人以上で会話をしながら爆弾解除にチャレンジする独特なシミュレーターゲーム!』です。
1人が「処理担当者」となり、ゲーム画面を見ながら画面内の爆弾の状況を説明して、その他の人は「分析担当者」となり「処理担当者」から説明された爆弾の状況を<爆弾解除マニュアル>を見ながら解除方法を「処理担当者」に伝えて、協力しながら一つの爆弾を解除するのです。
要するに、いかに相手に情報をうまく伝えることができるかを試されるゲームです。

「処理担当者」はマニュアルを見れない、「分析担当者」は爆弾が見れないので目で見た情報を丁寧に分析して相手に伝える必要があるので本当に難しいです。
デザイナーたるもの「伝える」ことが仕事だと思っているので、やっている最中はいかにわかりやすく相手に伝えられるかを意識してプレイしました😂

価格は1,600円(Nintendo Switch版)で、<爆弾解除マニュアル>はこちらから無料でダウンロードすることができます。
印刷したほうが雰囲気は味わえるのですが、スマホやタブレットで閲覧しても特に問題なく利用できました。

爆弾の状況を分析する際にメモは必須です。マニュアルに書いてあるヒントをもとに、必死に解除方法をメモ帳に状況を書き殴りながら考えました(笑)


以下、プレイ画面です。


爆弾には「モジュール」という部品が付いていて、この「モジュール」をマニュアルに書いてあるヒントをもとに解除していきます。
爆弾に付いているすべての「モジュール」を解除すれば、爆弾解除となります。
また、アラーム音やBGMが程よく緊張感を与えてくれます。
1回間違えるごとに残り時間の進みが少しだけ早くなるのでさらに焦ります(笑)


「ノーマルモード」と「フリーモード」の2つのゲームモードがあります。

「ノーマルモード」は、ミッション形式になっていて進むごとに解除が必要なモジュールが増えて難しくなります。(私は4つめのミッションぐらいから詰みはじめました笑)

「フリーモード」は、モジュール数や制限時間を自由に設定できるモードです。好きなミッションを作って遊べます。

プレイしているとあっという間に時間が過ぎて、暇になりそうだったおうち時間がはかどりました🏡
パズルゲームやパーティーゲームが好きな方にはとてもおすすめなので、ぜひプレイしてみてください🎮スマホアプリ版があればもっと手軽にできるかなと思いました。開発会社さんよろしくおねがいします(笑)

コロナで皆さん大変かと思いますが、少しでもおうち時間が楽しい時間になるように、いろいろなものを今後も取り入れていきたいと思います👌