ITとdesign エンジニアのブログ by エンジ庭

IT業界のトレンドなどIT分野について学んだ事を書いていきます。プログラミング技術などについて現在Qiitaメインに書いてますので、そちらを参照ください。  https://qiita.com/kota_sho

IT用語まとめ 随時更新

IT用語まとめ

 

都度、学習用ノートにメモしていたものを一旦まとめます。

プログラミング、ネットワーク、インフラなどITに関する言葉が含まれています。

未分類のため順不同です。

また整理して、わかりやすくまとめます。

 

API

あるコンピュータープログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約。

 

オペランド

数式を構成する要素のうち、演算の対象となる値や定数、変数などのこと。

 

KVS

データの保存、管理手法の一つで、任意の保存したいデータ(値:Value)に対し、対応する一意の認識(Key)を設定し、これらをペアで保存する形式。

 

Cookie

Webサイトの提供者が、Webブラウザを通じて訪問者のコンピューターに一時的にデータを書き込んで保存させる仕組み。

 

エンドツーエンド(E to E)

通信を行う二者、あるいは二者間を結ぶ経路。高度な通信制御や複雑な機能を末端のシステムが担い、経路状のシステムは単純な中継、転送のみを行う。

 

ポート番号

インターネットで標準的に用いられるプロトコル(通信規約)であるTCP/IPにおいて、同じコンピューター内で動作する複数のソフトウェアのどれが通信するかを指定するための番号。

 

クリティカルパス

プロジェクトの各工程をプロジェクト開発から終了まで「前の工程が終わらないと次の工程が始まらない」という依存関係にあるような経路。その長さがプロジェクトの期間を表す。

 

スタンドアロン

機器やソフトウェア、システムなどを、他と接続せず単独で使うこと。

 

ファイアウオール

コンピュータやネットワークと外部ネットワークの境界に設置され、内外の通信を中継・監視し、外部の攻撃から内部を保護するためのソフトウェアや機器、システムなど。

 

ハッシュ化

元のデータから一定の計算手順に従ってハッシュ値と呼ばれる規則性のない固定長の値を求めて、その値によって元のデータを置き換えること。

 

シームレス

サービスやシステム、ソフトウェアなどが、複数の要素や複数の異なる提供主体の組み合わせで構成されている時、利用者側から見てそれぞれの違いを認識・意識せずに一体的に利用できる状態。

 

VPN

通信事業者の公衆回線を経由して構築された仮想的な組織内ネットワーク、また、そのようなネットワークを構築できる通信サービス。

 

サードパーティー

ある製品やサービスなどについて、その開発・販売元以外で、それに関連する、あるいは対応する製品を開発・販売する事業者。

 

ミラーリング

同じ内容を同時に二箇所に反映すること。複数の記憶装置に同じデータを記録したり、複数の表示機能に同じ内容を同時に映し出す。

 

プロキシ

企業などの内部ネットワークとインターネットの境界にあり、内部のコンピューターの代理(Proxy)として」インターネット上のコンピューターへ接続を行うコンピューター。また、そのような機能を持つサーバーソフトウェア。

 

イーサネット

主に室内や建物内でコンピューターや電子機器をケーブルでつないで、通信する有線LAN(構内ネットワーク)の標準の一つで、もっとも普及している規格。

 

アドオン

ソフトウェアに追加される拡張機能のこと

 

クラスタ

記憶装置の分野でHDなどのディスク状の記憶媒体をOSが管理する最小の単位。

 

ダッシュボード

複数の情報源からデータを集め、概要をまとめて一覧表示する機能・画面・ソフトウェア。

 

ダイアログ

コンピューターの操作画面で、利用者に何らかの入力を促すために表示させる領域。

 

ウィジット

コンピューターの操作画面を構成する何らかの機能を持った表示・操作要素。

 

ガジェット

ウィジットを組み合わせて作られる単機能の小さなアプリケーション。

 

コールバック

ある関数などを呼び出す際に、別の関数などを途中で実行するよう指定する手法。

 

キャスト

型変換のうち、開発者がコードを記述して明示的に行うもの。

 

ダンプ

記憶装置に記録された内容をまとめて表示、印刷、記録することやその内容。

 

エンコード

情報を一定の規則に従ってデータに置き換えて記録すること。また、ある形式のデータを一定の規則に基づいて別の形式のデータに変換。

 

フォールバック

システムが正常に機能しなくなったら、機能制限したり、別方式に切り替えて限定的に使用を継続させる。

 

ジェネリック

同じプログラムコードで様々なデータ型のデータを処理できるようにするためのもの。

 

識別子

フォルダ名、アカウント名などなど、特定の一つを識別するための名前、符号、数字など。

 

ロケール

初回起動時やメニュー設定で国、地域、言語を設定できること。

 

オフセット

何かの位置を示す際に、基準となる位置からの差(距離、ズレ、相対位置)を表す値。

 

ペイロード

送受信されるデータの伝送単位(パケットなど)のうち、宛先などの制御情報を除いた、相手に送り届けようとしている正味のデータ本体のこと。

 

サニタイズ

利用者が入力した文字データを受け取る際に、プログラムにとって特別な意味を持つ可能性のある文字や文字列を検知し、一定の規則に従って別の表記に置き換える。

 

シーケンス

順番に並んだ一続きのデータや手順。

 

スナップショット

ある時点における対象の全体像を丸ごと写し取ったもの。データベースのコピーなど。

 

 

続・ブロックチェーン

前回は、ブロックチェーンの基本の仕組みについて書きました。

暗号化技術、コンセンサスアルゴリズムP2P、分散型台帳の技術により、

箱に入れて並べて、みんなで確認し、中央で管理する人は置かずに、記録を全員で管理

事により自律分散型の情報管理のシステムを実現するのがブロックチェーンでした。

 

今回は、そのブロックチェーンがどのように使われているのか、またこれからどう使われていくのかをまとめます。

引き続き中田さんの動画を参考にし、まとめます

 

まず、ブロックチェーン技術によって可能になったものの1つ、

それがビットコインに代表される仮想通貨。

2008年、サトシ・ナカモト氏によって提案されたビットコインは翌年からソフトウェアがオープンしました。

 

ビットコインの技術にマイニングというものがあります。自分も名前は聞いたことがありましたがいまいち良くわかりませんでした。

ビットコインの取引では、いくらで買います、売りますの情報を箱に詰める作業がありこれが前回書いた暗号化になるわけですが、まず箱に詰めるにはデータを解析して計算して答えを出したら箱に詰めるという流れになります。それがマイニングと呼ばれるものであり、マイナーと呼ばれるマイニングのプロが作業をしているそうです。

マイナー同士は集団ではなく競争し、マイニングをした最初の1人にビットコインが新規発行される仕組みになっています。

一般人が売り買いしている通貨というのは、いますでに出回っている通貨であり、マイナーがマイニングすることにより、新規のビットコインが発行され、そのマイナーが手にします。 

 

もちろんこのビットコインは高騰することもありました。当時の状況は、

仕組みをわかった人がまずビットコインはすごい!と騒ぎ始め、なんか分からないけどすごいらしい。買ってみようという人が買いに走ったため高騰しました。投機的なものですね。何かわからないけどすごいらしい、、、でも

その後暴落。

これは先に買った分からない人が後から来た分からない人へ売り儲けた。

これはビルゲイツ曰く「バカがバカに売った」。となかなか厳しい、

自分は買ったことはありませんが、自分もビットコインの仕組みが全く理解できていない大バカです笑。

 

実はこのビットコイン。発行数の上限が限られているそう。

2140年に発行終わるため、上がる仕組みになっているそう。

自分も将来のために買おうかと思いましたが、生きてねーし笑。

じゃあ、絶対上がるのであれば買っておいて損はないよねと思いきや、

そう一筋縄ではいかない。

なぜなら

現時点で

 

 

発行数の9割を上位1%が所有

 

しているから。

 

つまりその1%の人が売った瞬間に暴落。発行数限られているから上がり続けますが、その売られ暴落を迎える日をラストデイと言うそう。 いつか分からないが。

 

ではビットコインは通貨なのか。

通貨ではありません。

決算手段に使える財産的価値と言われていますが「通貨」としては認められていません。

通貨として認められるためには価値が安定しなければなりません。

円やらドルやら通貨を価値を安定させるために各国調整していますが、それも価値を安定させるため、それはなぜか安定しなかったら国民が安心して経済活動ができないから。なのでビットコインは「通貨」までにはなっていません。

 

前回書いた、5G時代の4つの神器のうち

IoT、クラウド、AIは中央集権型でありGAFAが覇権を握っています。

対して唯一ブロックチェーンは自立分散型であり真逆の世界を作ろうとしている仕組みです。

 

ではなぜまだ普及していないのか

それは国の法律や既得権益を超えられていないから。

国は中央集権型ですし、いきなり全てを変えられません。法律の壁がありますし。

そこでWHY BLOCKCHAINの著者が取り組んでいるのが

 

プライベートブロックチェーン

 

調剤薬局改革を目指しているそう

調剤薬局は薬の在庫をたくさん持ってます。

さらに既存のものととジェネリックで在庫は倍以上になっている状況です。

ただ、使用期限があり在庫を捌かないといけない。

でも調剤薬局同士は連携していない(チェーンではない)ので相互にやり取りして在庫の調整ができません。

チェーンであれば店同士で調整が効くが調剤薬局はそうはいきません。

そこで登場するのがブロックチェーン

ブロックチェーンで店同士を結びつけて相互に在庫の調整をし合うという試み。

それぞれは独立していますが在庫など店同士で調整がつきます。

 

これは1社だと意味がない

ということ。

誰か一人が「俺やる!」といっても機能しません。

しかし、複数が集まり仕組みを作れば小さなコミュニティを作り上げることができる

というのがブロックチェーン

 

法律などを変える必要があり、いきなり大きいことは変えられませんが、

小さいコミュニティを作り上げる力があります。

 

今までの中央集権型の国の作り方、企業の作り方から違う作り方へ。

中央集権型が終わる日は来るのか

GAFAに支配されなくなる日が来るのか

そんなことが言われています。

 

勝者を作らない仕組みであり

暗号化もされている

そして誰も改ざんできない

みんなが平等に

独裁者が生まれない仕組み

 

それがブロックチェーン

 

これからも個人的には研究していきたいと思います。

 

興味のある方は中田敦彦さんのYoutube動画、書籍「WHY BLOCKCHAIN」をご参考ください。

 

 

 

 

ブロックチェーン

ブロックチェーン

ブロックチェーンに興味があったので色々調べてみました。

よく聞くし、なんとなくわかるけどちゃんと仕組みが理解できていませんでした。

丁度中田敦彦さんが動画で解説されており、わかりやすかったので

自身の学習用メモとしてブロックチェーンとは何かについてまとめます。

こちらの本を元に解説をされていました。

 

WHY BLOCKCHAIN

https://www.shoeisha.co.jp/book/detail/9784798162652

 

「このブロックチェーンの本質は、技術でなく思想である」

 

ブロックチェーンは技術ではなく考え方が新しい。

今まで移動通信システムは1Gから進化を続けてきました。これから5G世代に入っていきますが、その5Gにおいて重要な役割を担うと言われているうちの1つがブロックチェーン

 

まず、今までの歴史から

1G 携帯電話の登場 B to B

2G アナログからデジタルへの変革 メールやWebの閲覧が可能に

3G 高速な通信とそれによるインターネットの利用

4G スマートフォンの登場

5G これからの世界

 

 

バイスは従来の携帯電話からスマートフォンに代わり、随分と便利になりました。

しかし、それ以上の画期的なものは登場していません。ある時からデバイスは進化しなくなりデバイスコモディティー化(日用品化)するようになりました。

ウェアラブルスマートスピーカーと言ったものが登場していますが、これは次世代への実験中という事のよう。

 

インターネットはもともとBtoBでありオフィスの中だけ、ビジネスのためにあり

それが → 個人用PCやスマホの登場

→ フリマアプリなど個人間のやり取り(CtoC)が始まり

今は、SNSで個人で発信する  ポストスマホ時代 常時オンライン化した個人の時代へと突入しています。

 

無人のレジはもう遅いと言われこれからはレジなしの店がどんどん生まれていくと言われる時代。次の時代が見えてないと設備投資や努力が無駄になってしまうという指摘も。

 

そして今から5G時代に入っていく中で、キーになってくると言われている「4つの神器」

 

5G時代の4種の神器

これからの5G時代にはどのような技術が使われていくのか。

5G時代の4種の神器と言われているのが、

 

IoT 

「データを集め」

スマホ、PCだけではく、車や家電など身の回りのものや工場内でも、全てがインターネットにつながる時代へ。 

 

クラウド 

「集めたデータをクラウドへ」

ハードに情報をストレージする必要はなく、クラウド上に情報を上げ管理する。

 

ブロックチェーン 

「集まったデータを管理し」

 

AI 人工知能 

「どのように使うか考える」

 

ブロックチェーン

本題のブロックチェーンについて

以下、4つの技術によってブロックチェーンは仕組化されています。

いずれの4つの技術共もともとあったものですが、これらを合わせることによってブロックチェーンは仕組化されました。

 

1、暗号化技術 

 データのやり取りは全て暗号化されています。メールなど届ける途中で暗号化されており、相手に届く際に人間が読めるように文字に変換されます。動画では引っ越しに例えられ、引っ越しする際にはカテゴリーごとに荷物を梱包しますが、それと同じで「情報を梱包して見えなくした上で箱に詰める」作業が暗号化です。その箱が順番に並べられる、つまりブロックに入れてチェーン上に並べる。(詰めて並べる)のがブロックチェーンを作る1つめの技術。

 

2、コンセンサスアルゴリズム

次に、詰めて並べた後にみんなで確認する作業。

ブロックチェーンでは後述のP2Pの仕組みにより中央に管理者がいないため、参加者全員で不正な取引がないか確認します。

ネットワーク内で行われた新規の取引の正当性については参加者全員で合意をする必要があります。合意形成上のルールを定めるのがコンセンサスアルゴリズム

 

3、P2P

中央集権型ではなくP2P(ピアツーピア)。

中央のサーバーにアクセスして情報やデータを得るのではなく、相互に対等なもの同士が情報やデータのやり取りを行う。リーダーはおらず、全員が対等な関係。

 

4、DLT(分散型台帳技術)

(記録をみんなで持つ)どこの箱に何を入れて、いつ何を編集したか共有する。

改ざん不可能であり情報の信頼性高い

 

以上が、

・詰めて並べる(暗号化技術)

・並べたものをみんなで確認する(コンセンサスアルゴリズム

・リーダーはおらず(P2P

・記録をみんなで持つ(分散型台帳技術)

 

それが

 

ブロックチェーンであり

自律分散型の情報管理のシステム

 

一度走り出したらコントロールする人はいないし

仕組みができたらあとはそのルールの中で行われる

それを元に作られました。

 

そしてビットコインに代表される仮想通貨もこのブロックチェーンを基に作られました。

 

次回は仮想通貨をはじめ、どのようにブロックチェーンが使われているのか、また今後使われていくであろうか、まとめます。

 

 

SQL WHERE句に書けるもの、書けないもの

2019-09-01

 

WHERE句はテーブルから情報を取得する際に、条件をつけることができます。

販売単価を取得したい、条件として価格が100円以上のものとしたい場合、

SELECT hanbai_tanka
FROM Shohin
WHERE hanbai_tanka > 100

 

いろんな条件で取得したい時、ついついWHERE句に全て詰め込みたいところですが、

WHERE句になんでも書くことができる訳ではありません。

 

WHERE句に書けるのは「条件式のみ」です。

真・偽の条件式で、もともとテーブルにある行のみです。

例えば、SUMは行の数字を足し合わせる、COUNTは行数を数えるなどテーブルに何か加工して別の数字として引数が帰ってきますので使えません。単価が300円と500円の2行のテーブルがあったとして、合計の800円を取得したいということはできません。取得できるのは800円と300円のみです。

 

下記、WHERE句に書けるもの、書けないものをまとめます。

 

書けるもの:

 

比較演算子

・IS NULL

・IS NOT NULL

・LIKE

・BETWEEM

・IN

・ANY

・ALL

・=,  <,  >,  <=,  >=,  <>

論理演算子

・AND

・OR

・NOT

 

書けないもの:

四則演算

・+,  ー,  *,  /

下記の関数など

・SUM

・COUNT

AVG

   etc...

 

関数でも、例えば下記のLENとかは使えます

SELECT shohin_mei
FROM Shohin
WHERE LEN(shohin_mei) > 3

上でも書きましたが、要は条件式になるかどうかです。

 

SQL 関数まとめ編(SQL Server向け) ※随時更新

2019-08-28

SQLを勉強し始めて、よく目にする関数をまとめていきます。

RDBMSによって使える関数が異なりますが、SQL Server向けの関数をまとめます。

 

集計関数

 

AVG 平均を計算

SELECT AVG(販売単価) AS 平均単価
FROM Shohin

 

COUNT 行数をカウント

SELECT COUNT(販売単価) AS 単価の行数
FROM Shohin

 

MAX 最大値を得る

SELECT MAX(販売単価) AS 最も高い単価商品
FROM Shohin

 

MIN 最小値を得る

SELECT MIN(販売単価) AS 最も低い単価商品
FROM Shohin

 

SUM 合計値

SELECT MIN(売上) AS 売上合計
FROM Shohin

 

 

文字列関数

 

CHAR コードから文字に変換

CONCAT 文字列結合

SELECT CONCAT(last_name, '', full_name)
FROM Staff

 

LEN 文字列長を得る

SELECT LEN(商品名) AS 商品名文字数
FROM Shohin

 

SUBSTRING 文字列の部分抽出

SUBSTRING(切り取り文字列,  切り取り開始位置,  切り取り文字数)

SELECT SUBSTRING('あいうえお’, 2, 3)
-- いうえ

'あいうえお'の2文字目から3文字切り取る

 

 

日付関数

 

CURRENT_TIMESTAMP 現在日時を得る

SELECT CURRENT_TIMESTAMP

 

FORMAT 日付時刻の整形

SELECT FORMAT(GETDATE(), 'yyyyMMdd')

 

 

変換関数

 

CAST 型変換を行う

CAST(値  AS  変換後のデータ)

数値型 → 文字列型

SELECT CAST(100 AS VARCHAR(10))

文字列型 → 日付型

SELECT CAST('2018-01-01' AS DATE)

 

CONVERT 型変換を行う

CONVERT(変換後のデータ, 変換したい値)

SELECT CONVERT(decimal, '10.1')

 

COALESCE NULLでない最初の値を返す

COALESCE(列や式1, 列や式2・・・)

SELECT COALESCE('A', 'B', 'C')
--A
SELECT COALESCE(NULL, 'B', 'C')
--B

COALESCE(列や式,  NULLの代替値)

SELECT COALESCE(hanbai_tanka, 0) AS 販売単価

ISNULLもNULL値の変換ができます

流れはCOALESCEと同じです。

 

REPLACE 文字列を置換

REPLACE(対象文字列,  この文字を,  これに置き換える)

SELECT REPLACE('YAMADA', 'DA', 'ZAKI')
--YAMAZAKI

 

 

算術関数

 

ABS 絶対値を取得

ABS(数値)

SELECT ABS(-50)
--50

 

ROUND 丸め処理

・ROUND(四捨五入したい数字)

・ROUND(四捨五入したい数字,  小数点第何位まで)

SELECT ROUND(10.234, 2)
--10.230

POWER べき乗

POWER(数値,  〜乗)

SELECT POWER(3, 4)
--81

 

 

分析関数

 

RANK 順位を決める

対象列,  RANK() OVER(ORDER  BY  対象列  DESC)

SELECT tanka RANK OVER (ORDER BY tanka DESC)
FROM Shohin

 

 

 

 

 

 

 

SQL 結合編

2019-08-27

結合も集合演算子と同じようにテーブル同士をくっつけます。

集合演算子が行を足し合わせる(テーブル同士を上下にくっつける)に対し、

結合は列をくっつけます(テーブル同士を横にくっつける)。

 

結合の種類:

内部結合  INNER JOIN

左外部結合    LEFT OUTER JOIN

右内部結合    RIGHT OUTER JOIN

完全外部結合   FULL OUTER JOIN

自己結合

 

SELECT 選択列

FROM テーブル

JOIN 結合するテーブル ON

結合条件 = 結合条件

 

内部結合  INNER JOIN

両方のテーブルの結合条件に一致する行だけ取得します。

SELECT TS.tenpo_id, TS.tenpo_mei, TS.shohin_id, S.shohin_mei, s.hanbai_tanka
FROM TenpoShohin AS TS INNER JOIN Shohin AS S
ON TS.shohin_id = S.shohin_id;

訳:

TenpoShohin(TSと呼ぶことにし)とShohin(Sと呼ぶことにし)を結合する。

そのため、結合条件としてTSのshohin_idとSのshohin_idを紐づける。

内部結合に関わらず、どの結合方法も基本的には流れは同じです。

INNER JOINにするか OUTER JOINにするかという違いです。

 

外部結合 OUTER JOIN

内部とは反対に、外部は全行を取得します。

左外部結合は左のテーブルを基準とし、結合されるもう一方のテーブルは左テーブルと一致するレコードのみ取得されます。

右外部結合はその逆となります。

書き方は基本、内部結合と変わりませんし、左か右かもLEFTかRIGHTにするだけです。

SELECT TS.tenpo_id, TS.tenpo_mei, TS.shohin_id, S.shohin_mei, s.hanbai_tanka
FROM TenpoShohin AS TS LEFT OUTER JOIN Shohin AS S
ON TS.shohin_id = S.shohin_id;

 

完全外部結合 FULL OUTER JOIN

両方のテーブルどちらも優先で、結合条件で一致するレコード、一致しないレコード全てを取得します。

 
SELECT TS.tenpo_id, TS.tenpo_mei, TS.shohin_id, S.shohin_mei, s.hanbai_tanka
FROM TenpoShohin AS TS FULL OUTER JOIN Shohin AS S
ON TS.shohin_id = S.shohin_id;

 

 

自己結合

上記では結合は2つのテーブルを結合してましたが、内部結合では1つのテーブルの中で結合します。検索したいものを、1つのテーブル内の情報を組み合わせて探し出します。

SELECT 選択列

FROM テーブル AS テーブル1

JOIN テーブル AS テーブル 2 ON

(テーブル1.項目 = テーブル2.項目)

SELECT staff.id AS id,
staff.name AS 名前,
boss.name AS 上司名
FROM staff
JOIN staff AS boss ON
(staff.boss = boss.id)

 

会社の組織のなかで、自分の上司は会社内の人ですし、同じく自分の部下も会社内の人です。つまりテーブルに全メンバーがいれば、もう一つ同じテーブルを用意し、メンバー同士の関係性を組み合わせれば上司は誰かということが導き出されます。プロセス上もう一つのテーブルを作りますが、実態は、一つのテーブル内の情報で検索が完結できるということです。

 

 

SQL 集計演算子編

2019-08-27

集合演算子

 

構造が似たテーブルを合算させることができるのが集合演算子

構造が似たというのは、列数、列名が同じテーブルのことです。

例えば、家計簿データベースで行数が増えてきたので、アーカイブテーブルに古いデータを写した場合、構造が同じテーブルが2つできることになりますので、それらをもう一度がっちゃんこできるということです。

集合演算子には、いくつかの演算子がありますので、それぞれまとめます。

 

和集合を求める UNION

 2つのSERECT文の検索結果を足し合わせます。

イメージとしてはテーブルの足し算(行の足し算)です。

なおUNIONでは重複行があった場合、1つにまとめます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
UNION
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

UNION ALL

は重複行があった場合も全て含めます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
UNION ALL
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

差集合を求める EXCEPT

レコードの引き算です。

式1EXCEPT 式2は式1から式2を引く、つまり式1にはあって式2にはないものが最後残ります。下記で言えば、shohinテーブルにはあるけど、shohin2テーブルにはないものが選ばれます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
EXCEPT
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

積集合を求める INTERSECT

両方のテーブルにある共通のものが選ばれます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
INTERSECT
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

集合演算子の注意点:

・集合対象となるレコードの数は同じであるべし

・足し算の対象となるレコードの列のデータ型は一致しているべし

・SELECT文はどんなものを指定してもいいが、ORDER BYは最後に一つだけ