分割代入とは
配列の分割代入
【構文】
【変数x、y、zを宣言し、配列の要素を代入】
【配列の要素に不要なものがある時】
【宣言済みの変数】
【デフォルト値の設定】
【スプレッド演算子との併用】
オブジェクトの分割代入
【構文】
【例1】
【例2】
【例3】
【例4】
【例5】
関数の引数に対する分割代入
【構文】


マイナスで左へ移動。
Y軸方向の値をプラスにすると下、
マイナスで上へ移動する。







実行結果
![]()

実行結果
![]()

実行結果

実行結果


実行結果
















|
1 2 3 4 5 |
// 名前付き関数を使用した場合 取得した要素.onイベント名 = 関数名; // 無名関数を使用した場合 取得した要素.onイベント名 = function() { 処理内容を記述する } |
|
1 2 |
<!-- clsクラスがついたり消えたりするボタン --> <button onclick="document.querySelector('.title').classList.toggle('cls');">ボタン</button> |
|
1 2 3 4 5 6 7 8 |
// 名前付き関数を使用した場合 取得した要素.addElementListener( "イベント", "コールバック関数"); // 無名関数を使用した場合 取得した要素.addElementListener( "イベント", function() { 処理内容を記述する }) |
|
1 |
取得した要素.removeEventListener( "イベント", "削除したいイベントリスナー関数名") |
|
1 |
event.preventDefault(); |
|
1 |
取得した要素.onイベント名 = null; |

こんにちは、デジナーレ福岡オフィスの徳安です。
この記事では、JavaScriptの変数宣言と動的型付け言語について説明いたします。
変数とは、プログラムで使用される値を、
一時的に保存しておくために領域に固有の名前を付けたものです。
変数は値そのものではなく、値の保管場所(アドレス)を保存しています。
JavaScriptには、以下の3つの変数を宣言するキーワードが存在しています。
・let(ES6~)
・const(ES6~)
・var
ES6(ECMAScript 2015)から使用できるようになった変数で、
宣言することによって使用できるようになる変数です。
|
1 |
let 変数名 = 値; |
【例】
|
1 2 3 |
let hello = "こんにちは"; console.log( hello ); // コンソールで出力 |
【出力結果】
*値を変数に代入して、変数を関数に渡しています。
※プログラムでは、変数に値を代入するときに 「 = 」を使用しますが、
右辺の値を、左辺に代入するという意味で等しいことではありません。
let で宣言した変数は、
値を上書き(再代入)をすることができます。
|
1 2 3 4 5 |
let hello = "こんにちは"; console.log( hello );// コンソールで出力 hello = "Hello!!" console.log( hello );// コンソールで出力 |
【出力結果】
このように値を代入することができます。
*注意*
再代入と似た用語で、「変数の再宣言」というものがあります。
再宣言は、同じ変数名で再度宣言を行うことで、
「 let 」と「 const 」ではエラーになるので注意が必要です。
|
1 2 3 |
let hello = "こんにちは"; let hello = "Hello!!"; // エラーが発生 |
【出力結果】
変数が参照する値を変化させたい場合など、
変数への再代入が必要な場合はletを利用します。
また、letは初期値がなくても変数の宣言ができます。
(undefinedという値で初期化される)
undefinedは未定義という意味でnullや空白とは異なります。
undefinedという値が変数にセットされています。
let と同様に、ES6(ECMAScript 2015)で使用できるようになりました。
|
1 |
const 変数名 = 値; |
【例】
|
1 2 |
const hello = "こんにちは"; console.log( hello ); |
【出力結果】
constは宣言した後に、値の再代入ができません。
そのため、constには後で変更しない値など、
変動がない値を扱うときに使用されます。
|
1 2 |
const hello = "こんにちは"; hello = "Hello!!" // エラーが発生 |
【出力結果】
しかし、変数の値がオブジェクトまたは配列(参照型)であった場合は、
値を変更したり、削除したりすることができます。
|
1 2 3 4 5 6 7 8 |
const arr = ['A', 'B', 'C']; // これは値の代入になるので、エラー ↓ //arr = ['あ', 'い', 'う']; // OK ↓ arr[1] = 'い'; console.log( arr ); |
【出力結果】
ES6以前に使用されていましたが、
varでの変数宣言は、現在は非推奨となっています。
その理由がいくつかあるので、非推奨である理由をまとめてみました。
・ 宣言をしなくても変数として、使用できる。
・ 同じ名前の変数で再宣言ができてしまう。
・ 巻き上げという独自の挙動がある。
|
1 2 |
hello = "こんにちは"; console.log(hello); |
このように、変数宣言をしなくても
変数を宣言したように、使用できてしまいます。
一見、とても便利な機能に思えますが、
エラーが発生した際にエラーの原因がわからなくなってしまうことや、
バクが発生しやすくなってしまうため、
変数は必ず宣言してから使用するようにしましょう。
またJavaScriptには、strictモード(厳格モード)を有効にした開発が推奨されています。
strictモードで、宣言されていない変数に値を代入しようとするとエラーとなります。
特別な理由がない限り、strictモードを有効化して開発を行うようにしましょう。
|
1 2 3 4 5 |
var hello = "こんにちは"; var hello = "hello"; console.log( "hello" ); |
【出力結果】
letやconstで再宣言をすると、以下のエラーが発生しますが、
varでは再宣言が可能です。
【出力結果】
同じ変数名を使用してもエラーが発生しないため、
コードが肥大化した際など、同じ変数名で再宣言してしまい、
意図した値が取得できなくなってしまいます。
varには、巻き上げと呼ばれる独自の挙動があります。
varでは、現れる場所に関係なく、コードを実行する前に処理されます。
|
1 2 3 4 5 6 7 8 9 10 |
var hello = "こんにちは"; function <span>greeting</span> (){ console.log( hello ); var hello = "hello"; console.log( hello ); } <span>greeting</span>(); |
【出力結果】
実際には以下のように、関数の先頭で変数が
改めて宣言されている挙動になっています。
捉え方としては、先頭でundefined型の変数を宣言して、
後ろの行で再代入している、というイメージです。
|
1 2 3 4 5 6 7 8 9 10 11 |
var hello = "こんにちは"; function <span>greeting</span>(){ var hello; console.log( hello ); //undefined hello = hello; console.log( hello ); } <span>greeting</span>(); |
これまでのことを表にまとめると、以下の違いがあります。
| let | const | var | |
|---|---|---|---|
| 再代入 | 可能 | 不可能 | 可能 |
| 再宣言 | 不可能 | 不可能 | 可能 |
| スコープ | ブロックスコープ | ブロックスコープ |
関数スコープ、 グローバルスコープ |
また、プログラミング言語には、
動的型付け言語と静的型付け言語があります。
JavaScriptのデータ型は、
プログラム実行時に値が設定された時点で自動的にデータ型が決まります。
一方、開発者が明示的にデータ型を宣言する必要がある
プログラミング言語のことを,動的型付け言語と呼びます。
自動的に型が決まる動的型付け言語は、
表記が簡素になり便利に感じますが、
プログラムが実行された際に判断されるため、
バグが混入しやすくパフォーマンスが悪くなる傾向にあります。
そのため近年では、JavaScriptでデータ型の定義ができる
「TypeScript」というプログラミング言語が注目を集めています。
今回は、JavaScriptでの変数宣言の方法、静的型付け言語についての内容でした。
ここまで読み進めていただきありがとうございました。
|
1 2 3 4 5 6 7 |
<div class="container"> <header class="header">ヘッダー</header> <main class="main">メイン</main> <aside class="side1">サイドバー1</aside> <aside class="side2">サイドバー2</aside> <footer class="footer">フッター</footer> </div> |
|
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 |
.container { display: grid; grid-template-rows: 100px 1fr 100px; grid-template-columns: 200px 1fr 200px; grid-template-areas: "header header header" "side1 main side2" "footer footer footer" } .header{ background-color: rgb(255, 215, 221); grid-area: header; } .side1 { background-color: rgb(75, 204, 75); grid-area: side1; } .side2 { background-color: rgb(122, 96, 238); grid-area: side2; } .main { background-color: rgb(247, 90, 90); grid-area: main; } .footer{ background-color: rgb(252, 232, 120); grid-area: footer; } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<main> <ul class="box"> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> <li>グリッドコンテナ</li> </ul> </main> |
|
1 2 3 4 5 6 7 8 9 10 |
.box { display: grid; gap: 20px; grid-template-columns: repeat(5, 1fr) } .box li { list-style: none; height: 150px; background-color: rgb(214, 214, 214); } |
|
1 2 |
grid-column: 1/3; grid-row: 1/3; |
現在のプロジェクトで初めてpytestを使用したテストの自動化を行ったので、備忘録としてまとめます。
一口にPythonのテストツールといっても現在いろいろなツールがある。
今回pytestを使用する理由を、例としてPython標準ツールのunittestと比較してみる
その1.直観的に書ける
pytestはassertの後に条件式を書けば結果の検証ができるが
unittestは複数種類のassert関数を覚える必要がある
その2.Classを書かなくていい
unittestはテスト用のClassを作成する必要があるが
pytestはtest_*.pyまたは*_test.pyという名前のファイルに、test_*という関数名を付けるとpytestがテスト関数だと判断してくれる
その3.テストの失敗理由が分かりやすい
unittestどのテストで失敗したかはわかるがテスト中のどの部分で失敗したか、なぜそのテストが失敗したかが示されない
pytestは失敗した箇所のどの値がなぜダメだったかをわかりやすく表示してくれる
assertの後に検証したい内容を書く
引数a,bを足した値を返す関数add_funcをテストしたいとすると
|
1 2 3 4 5 |
def add_func(a, b): return a + b def test_add_func(): assert add_func(1, 2) == 3 |
add_func(1, 2)の返り値は3が返ってきて、期待通りの値が返ってきてテストをパスする。
一方で
|
1 2 3 4 5 |
def add_func(a, b): return a - b def test_add_func(): assert add_func(1, 2) == 3 |
のようなコードだとadd_func(1, 2)の返り値は-1となり、返り値が期待通りでないのでテストをパスできず、add_funcの実装が間違っていることが分かる。
次に引数aから引数bを引いた値を返す関数sub_funcのテストを考える
この場合テストパターンとして(a>b, a=b, a<b)の3通りのテストをしたいとする
|
1 2 3 4 5 6 7 |
def sub_func(a, b): return a-b def test_sub_func() assert sub_func(2, 1) == 1 assert sub_func(2, 2) == 0 assert sub_func(1, 2) == -1 |
としてもよいのだがテスト関数の部分は
|
1 2 3 4 5 6 7 |
@pytest.mark.parametrize('a, b, result', [ (2, 1, 1), (2, 2, 0), (1, 2, -1) ]) def test_sub_func(a, b, result): assert sub_func(a, b) == result |
と書くことができる。
3通りぐらいなら上の書き方でもよいのだがテストパターンが増えてくると、parametrizeの第二引数を別のファイルで定義して渡すとよい
現在の日付の1週間前の日付を返す関数をテストすることを考える
|
1 2 3 4 |
from datetime import datetime, timedelta def get_one_week_ago(): return datetime.now() - timedelta(weeks=1) |
テストしたい関数の中でdatetime.datetime.now()を扱う場合、テストを行う日時によってnow()の中身が変動してしまう。
そうすると出力される値が特定できないためテストができなくなってしまう。
そこでfreeze_timeを使うとテストを実行する日時を固定することができる
|
1 2 3 |
@pytest.mark.freeze_time(datetime(2023, 6, 30)) def test_get_one_week_ago(): assert get_one_week_ago == datetime(2023, 6, 23) |
| 4つのセクション要素 | |
|---|---|
| section要素 | 章・節・項などの見出しと文書を伴う一般的なセクションを表す要素 |
| article要素 | それだけで自己完結していて、独立したセクションを表す要素 |
| aside要素 | メインコンテンツとは関連性が低い補足や広告などで、取り外しても問題のないセクションを表す要素 |
| nav要素 | ナビゲーションを表す要素 |
| その他の新要素 | |
|---|---|
| header要素 | セクションのheaderを表す要素 |
| footer要素 | セクションのfooterを表す要素 |
| main要素 | メインコンテンツを表す要素 |
|
1 2 3 |
〇〇{ position: 値 }; |
| positionの値 | |
|---|---|
| static | 初期値。指定することはほとんどない。 |
| relative | 現在の位置を基準に相対的な位置を決める。 |
| absolute | 親要素を基準に絶対的な位置を決める。 |
| fixed |
画面の決まった位置に固定する ※使う際は注意が必要 |
|
1 2 |
<p class="decoration">文章</p> <p class="relative decoration">相対的な位置になります。</p> |
|
1 2 3 4 5 6 7 8 9 |
.relative { position: relative; top: 10px; left: 10px; } .decoration { background-color: #0090aa; padding: 20px; } |
通常コンテンツと同様に配置して、
ほかのコンテンツの上に『重ねて表示したい場合』など、
やや限定的な仕様となります。
| 場所の指定 | |
|---|---|
| top | 要素が起点の上からどれだけ離れているか |
| bottom | 要素が起点の下からどれだけ離れているか |
| left | 要素が起点の左からどれだけ離れているか |
| right | 要素の起点が右からどれだけ離れているか |
|
1 2 3 |
<div class="absolute_parent"> <div class="absolute">絶対配置になります。</div> </div> |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
.absolute { position: absolute; background-color: #0090aa; padding: 20px; right: 0px; top: 0px; } .absolute_parent { position: relative; left: 30px; top: 30px; border: solid 2px red; height: 190px; width: 300px; } |
初めまして、デジナーレ福岡オフィスの徳安です。
この記事では、HTMLの基礎知識について説明いたします。
|
1 |
<!DOCTYPE html> |
|
1 |
<html lang = "ja"> |
|
1 |
<head> ~ </head> |
|
1 |
<meta charset="utf-8"> |
|
1 |
<title> ~ </title> |
|
1 |
<body> ~ </body> |
| h1~h6 | 見出しを表示、数字の順に使用する |
| p | 文章の段落を表す |
| img | src属性で表示したい画像を指定して表示 |
| a |
リンクを貼る。リンク先はhref属性で指定 (mailto:“メールアドレス”でメールソフトの起動ができる) |
| ul | 番号のない箇条書きリスト |
| ol | 番号付きの箇条書きリスト |
| li | リストの中身 |
| br | 改行させる |
|
small |
著作権や法的表記を含んだテキスト |
| span | spanタグで囲んだ部分のみ、デザインを変更することができる |
| script |
スクリプトデータを埋め込んだり参照する JavaScriptのコードに使う |
| header | ページ上部にある要素検索 フォームやナビゲーションも含む |
| footer | ページ下部にある要素 |
| article | ページ内の記事になる部分 独立したページとしてなりたつ |
| aside | 本文ではない補足情報でサブメニューやサイドバーなどで使われる |
| link |
参照する外部ファイルやCSSファイルを読み込むときに使われる rel=“stylesheet”(ファイルとの関係性、どのようなものなのか) href=“https:/example.com”(どのファイルを読むかの記載) |
| table | 表を表すタグ |
| tr | 表のラインとなる部分、1行を囲む |
| th | 表の見出しを表すセル |
| td | 表のデータを表すセル |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<table> <tr> <th>セル1+2</th> <th>セル2</th> </tr> <tr> <td colspan="2">セル3+4</td> </tr> <tr> <td>セル5</td> <td>セル6</td> </tr> </table> |
| セル1 | セル2 |
|---|---|
| セル3+4 | |
| セル5 | セル6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<table> <tr> <th>セル1</th> <th>セル2</th> </tr> <tr> <td rowspan="2">セル3+5</td> <td>セル4</td> </tr> <tr> <td>セル6</td> </tr> </table> |
| セル1 | セル2 |
|---|---|
| セル3+5 | セル4 |
| セル6 |
| id |
ひとつのidはページ内で1度しか使用できない。 また、1要素に複数のidをつけれない。 |
| class |
ひとつのページ内で同じclassをいくつでも使える。 1つの要素に複数のclassをつけてよい。 |
|
1 2 3 4 5 6 7 8 |
<a href="#content">リンク1</a> ~その他コンテンツ~ <div id=”content”>ここまで</div> |
こんにちは。サービスプロデュサー&広報の西田です。
今回は弊社のサービスプロデューサー、YNさんにインタビューしました!
転職活動時に感じていた不安や、実際に案件を担当されるようになった今の心境をざっくばらんにお話しいただきました。
ぜひ最後までお読みください。
前職ではテレビ番組制作のADをやられていたと伺っていますが、どのようなディレクション業務を担当されていましたか?
プロデューサーやディレクターから、ロケ撮影の大まかな希望が降ってきて、ロケに必要なありとあらゆるものの準備と関係者との調整を担当していました。分かりやすいものでいうと、ロケ撮影の際に必要な1日の段取り作成や、ロケ先(お店など)との調整や、ロケに使用する小道具などの準備を、基本的に1人で行っていました。
入社された経緯やデジナーレに惹かれたポイントがあれば教えてください。
前職では、その業界でしか経験できないことも沢山ありましたが、 ADとしてある程度仕事を任されるようになり、その先を考えたときに、同じ業界で成長していく(ディレクターを目指す)より、違うジャンルで自分の強みを試してみたかったのが、転職のきっかけです。
ちなみに大学では情報系を学んでいたので、IT業界への転職に興味を持ちました。
デジナーレに惹かれたポイントは、新規事業に取り組んでいることや、成長を楽しむことに重きを置いていると感じられたことです。
違う業界で自分の強みを試してみたかったという転職の動機と、成長を楽しむというデジナーレの社風がマッチし、入社を決めました。
転職に対しての不安はありましたか?
IT業界未経験の自分が、デジナーレでやっていけるのかという点はすごく不安に思っていました。そこで既存メンバーへの面談を希望し、不安に思っていることを直接聞いてみたところ、前職で培った、調査スキルや、内部や顧客との調整といったディレクション経験を活かしつつ、新しく学ぶことを応援してくれる環境だとわかり、不安が解消できました。

それでは現在担当されている業務について教えてください。
業務の内容について現在、どのような業務を担当されていますか?
あるサービスの営業チームの成果を上げるために、営業支援ツールの運用支援・改善を担当しています。私は顧客内の2つのチームに入っており、扱っているのは同じツールですがチームによって用途が違うので支援内容も異なります。
1つ目は運用し始めたばかりで、まだ形が決まっていないため理想形に向けてツールを動かしている状態で、2つ目は3年ほど運用しており形が決まっているので改善がメインの業務となります。
業務でのやりがいや面白いと感じる点を教えてください。
前職にはない、自分主動でプロジェクトを動かしていけるところに面白みを感じ、成長しているのを実感できます。
1つ目の方は、理想形に向けていろんな意見が出る、自分も積極的に意見を出すのでツールのいじりがいがあると感じています。また、2つ目を運用していて課題に感じた点を反映できたり、逆に1つ目の運用から2つ目の改善アイディアが見つかったりすることもあります。
営業チームの成果を上げてもらうために、まずは営業が使いやすいツールにしていくことを目指し日々業務に励んでいます。
サービスプロデューサーとして、今後やっていきたいことや、挑戦していきたいものがあれば教えてください。
マーケティングに興味が出てきており、理想としては、営業しなくても顧客を獲得できる体制を構築していきたいです。今担当している営業支援ツールのデータ分析や、効率的な営業提案に向けた施策を考えるなど、より良いサービスのサイクルを作っていきたいです。
デジナーレのサービスプロデューサーでは、どんな役割が期待されていますか?
顧客によって抱えている課題は様々ですが、+αの提案や、いろんなパターンでのアイディア出しが重要だと考えています。言われた通りに動くだけではなく、柔軟な考え方ができてはじめて付加価値の提供になると考えています。
その目標・役割を果たすためにはどのような努力が必要ですか?
アイディアの幅を広げるために、新しいものに対する興味が大事だと考えています。
具体的には、自分がいままで知らなかった事も積極的に吸収していくことです。
デジナーレにはTipsをメンバー内で共有する時間があるので、メンバーが知らない情報をアウトプットし、メンバーからの情報をインプットすることができます。それらが付加価値の提供につながっていると考えています。
最後にこれから入るチームメンバーに求めることや期待することはありますか?
デジナーレは、職種問わず、新しいものへの興味や好奇心を持つことができる人が活躍できる会社だと考えています。また、私のように異業種からの転職でもディレクション経験は応用できるので、興味や好奇心を武器に顧客やサービス知識を補っていってもらえればと思います。
最後までお読みいただきありがとうございました!
デジナーレや、サービスプロデューサーの職種に興味を持っていただけたら、まずはご応募ください。
また、転職に対する不安などがございましたらお気軽にお問い合わせください。
新年、明けましておめでとうございます。
旧年中は格別のお引き立てを賜り、厚く御礼申し上げます。
今後も変わらぬご指導と、末永いお付き合いをお願い申し上げます。

皆様のご多幸と繁栄をお祈り申し上げます。
令和5年 元旦
株式会社デジナーレ
フォームよりお気軽にお問い合わせください。
担当者より折り返しご連絡いたします。
新しいサービス・事業にチャレンジしたい
メンバーを募集しています。