・フラグを活用して誘導するのが便利だなと思いました。
ですね。ご利用ください。
・内側と外側のbreakが難しかったです。
いろいろと試してみてください。
for trainees of Hirano's class only
・フラグを活用して誘導するのが便利だなと思いました。
ですね。ご利用ください。
・内側と外側のbreakが難しかったです。
いろいろと試してみてください。
次回予告:p.117「要素を入れずに配列を作成する」から
講義メモ:memo20250713.txt
補足:多重繰り返しと外側のbreak
・2重繰り返しの内側でbreakした場合、外側の繰り返しは続行されるので、必要であれば外側でもbreakを行う ・しかし、内側のカウンタ変数は、外側の繰り返しでは利用できない ・よって、この場合、下記2通りの方法がある ① 積を変数に保持しておいて外側の繰り返しでもチェックする ② フラグとなる変数を外側の繰り返しでfalseにして用いる
アレンジ演習:p.113 chap3_5_2.cs つづき
・積が50以上になったら、その時点までの内容を出力して終わるようにしよう ・まず、上記の①「積を変数に保持しておいて外側の繰り返しでもチェックする」で組んでみよう ・実行結果 「1,」 「2,4,」 「3,6,9,」 「4,8,12,16」 「5,10,15,20,25」 「6,12,18,24,30,36」 「7,14,21,28,35,42,49」 「8,16,24,32,40,48,」※56になるので出力して終了
作成例
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
string s = ""; //連結用の文字列変数を空で初期化
int mul = 0; //積
for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す
mul = x * y; //積を得る
if (mul >= 50) { //積が50以上なら
break; //この段の繰り返しを抜ける(次の段へ)
}
s = s + x * y + ","; //積とカンマを連結
}
Debug.Log(s); //連結結果を出力
if (mul >= 50) { //積が50以上になっていたら
break; //段の繰り返しを抜ける(終わる)
}
}
}
}
アレンジ演習:p.113 chap3_5_2.cs つづき
・積が50以上になったら、その時点までの内容を出力して終わるようにしよう ・上記の②「フラグとなる変数を外側の繰り返しでfalseにして用いる」で組んでみよう
作成例
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
bool flg = false; //フラグを未完にしておく
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
string s = ""; //連結用の文字列変数を空で初期化
for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す
if (x * y >= 50) { //積が50以上なら
flg = true; //フラグを完了にする
break; //この段の繰り返しを抜ける(次の段へ)
}
s = s + x * y + ","; //積とカンマを連結
}
Debug.Log(s); //連結結果を出力
if (flg) { //フラグが完了?
break; //段の繰り返しを抜ける(終わる)
}
}
}
}
p.114 配列の書き方
・配列:同じ型の同じ意味の変数群をまとめて扱う仕組み(データ構造)
・まとめたものに名前(配列名)を付け、0から数えて何番目かを示す添字(インデクス)を付けて表す
・例: スラリン、ホイミン、リムルを、スライムという配列の[0]番[1]番[2]番とする
・配列に属するデータのことを要素という
・変数と同様に、配列は宣言が必要
・配列の宣言の書式: 型[] 配列名;
例: string[] slimes;
・変数とは異なり、初期化において、要素の値を列記できる
・配列の初期化の書式: 型[] 配列名 = {要素値, 要素値, …};
例: string[] slimes = {"スラリン","ホイミン","リムル"};
・これにより、slimes[0]には"スラリン"、slimes[1]には"ホイミン"、slimes[2]には"リムル"が格納される
・配列の各要素は配列名[添字]で変数と同様に利用できる
補足:配列の添字と要素数
・なお、3要素の配列の最後の要素は[2]であり、[3]をアクセスすると異常終了する ・また、添字には0以上の整数のみ可能で、負の数や実数を与えると異常終了する
補足:配列の宣言と生成
・テキストでは配列は全て初期化(要素の数だけの値を格納)して用いている ・実際の仕様では、配列の要素を要素数を指定して確保(生成)しておき、後で要素値を代入することも多い ・配列の宣言の書式: 型[] 配列名; ・配列の生成の書式: 配列名 = new 型[要素数]; //要素数の分の領域を確保(生成)する ・宣言と生成は同時に行ってよい: 型[] 配列名 = new 型[要素数]; 例: string[] slimes = new string[3]; //要素数3の文字列型配列slimesの生成
アレンジ演習:chap3_6_1
・配列の添字はint型の変数でも可能なことを確認しよう ・そして、これをパブリック変数にすることで、0から3まで変更して違う方角が表示されることを確認しよう
作成例
using UnityEngine;
public class chap3_6_1 : MonoBehaviour{
public int n = 0; //【追加】パブリック変数(添字用)
void Start() {
string[] dirs = {"東","西","南","北"};
Debug.Log(dirs[n]); //パブリック変数を添字として当てはまる要素を表示
}
}
配列の要素を書き換える
・配列の要素は変数と同じ扱いなので、代入の左辺に置くことで、値を代入して書き換えることが可能 ・書式例: 配列名[添字] = 式や値;
string.Join()メソッド
・string型の配列の全要素を連結した文字列を得たい場合に便利なメソッドとして提供されている
・利用書式: 文字列型変数 = string.Join(区切り文字, string型配列名);
・なお、直接表示したり、利用することも可能
・例: Debug.Log(string.Join(",", slimes)); //"スラリン,ホイミン,リムル"を出力
アレンジ演習:chap3_6_2
・書き換えたい要素の添字と、書き換える文字列をパブリック変数で与えるようにしよう ・ついでに、string.Joinの区切り文字もパブリック変数で与えるようにしよう
提出:アレンジ演習:chap3_6_2
・p.110「繰り返し文を2つ組み合わせる」から
提出フォロー:ミニ演習 mini109c.cs:breakとcontinueの併用
・string型のパブリック変数flgを定義して"y"で初期化しておく ・1から10まで下記を繰返す ① 3の倍数ならば ・flgが"y"であれば、スキップ(continue)する ・flgが"y"以外であれば、繰り返しを脱出(break)する ② カウンタの値を表示 ・表示した値の合計を表示
作成例
using UnityEngine;
public class mini109c : MonoBehaviour{
public string flg = "y"; //処理選択フラグ
void Start() {
int sum = 0; //合計
for(int i = 1; i <= 10; i++) { //1から10まで繰返す
if (i % 3 == 0) { //3の倍数?
if (flg == "y") { //フラグがyなら
continue; //スキップして次へ
} else {
break; //繰り返しを脱出
}
}
Debug.Log("i = " + i);
sum += i; //合計に足しこむ
}
Debug.Log("合計 = " + sum);
}
}
p.110 繰り返し文を2つ組み合わせる(2重ループ)
・繰り返し文の中に同じまたは異なる種類の繰り返し文をいくつでも記述できる
・これを2重ループ(多重ループ)という
・同種の繰り返しとして利用場面が多いのがforの2重ループ
・例:1~3年の1~4組について生徒数を表示
・例:チェスの縦8マス×横8マスに駒を配置する
・forの2重ループの場合:
①外側の繰り返し用のカウンタ変数(主にiを使うことが多い)と、内側の繰り返し用のカウンタ変数(主にjを使うことが多い)は
異なる変数にする
②内側の繰り返しでは外側の繰り返し用のカウンタ変数を利用できる
③外側の1回目で内側の全回を行い、外側の2回目に進むイメージになる
例:
for (int i = 1; i <= 3; i++) { //1~3年について繰返す①⑭
for (int j = 1; j <= 4; j++) { //その1~4組について繰返す②⑤⑧⑪⑮…
Debug.Log(i + "年" + j + "組");③⑥⑨⑫
}④⑦⑩⑬
}⑬
実行すると 1年1組、1年2組、1年3組、1年4組、2年1組、2年2組、…
アレンジ演習:p.110 chap3_5_1.cs
・外側の繰り返しの上限の10をパブリック変数xa(初期値10)で渡すようにしよう ・内側の繰り返しの上限の10をパブリック変数ya(初期値10)で渡すようにしよう
作成例
using UnityEngine;
public class chap3_5_1 : MonoBehaviour {@
public int xa = 10; //パブリック変数
public int ya = 10; //パブリック変数
void Start() {
for (int x = 1; x < xa; x++) { //1の段から9の段まで繰返す
for (int y = 1; y < ya; y++) { //各段の×1から×9まで繰返す
Debug.Log(x * y);
}
}
}
}
アレンジ演習:p.113 chap3_5_2.cs
・何の段まで繰返すかをパブリック変数xa(初期値9)で渡すようにしよう ・各段の繰り返しを段の数以下までに制限しよう ・つまり、1×1、2×1、2×2、3×1、3×2、3×3、4×1、4×2、…、9×9 とすること
作成例①
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
for (int y = 1; y <= 9; y++) { //各段の×1から×9まで繰返す
if(y <= x) { //各段の繰り返しを段の数以下までに
Debug.Log(x + "×" + y + "=" + x * y);
}
}
}
}
}
作成例②
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す
Debug.Log(x + "×" + y + "=" + x * y);
}
}
}
}
アレンジ演習:p.113 chap3_5_2.cs つづき
・1段分の九九はカンマつなぎにして1度で出力しよう ・実行結果 「1,」 「2,4,」 「3,6,9,」 … ・ヒント ①内側の繰り返しの直前で連結用の文字列型変数sを""で初期化しておく ②内側の繰り返しの中ではDebug.Logする代わりに、sに「x * y」と「,」を連結する ③内側の繰り返しの直後でsをDebug.Logする ※この後、①に戻るので、sは""で初期化される
作成例
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
string s = ""; //連結用の文字列変数を空で初期化
for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す
s = s + x * y + ","; //積とカンマを連結
}
Debug.Log(s); //連結結果を出力
}
}
}
補足:多重繰り返しとbreak
・breakは繰り返しからの脱出になるが、2重繰り返しの内側でbreakした場合、外側の繰り返しは続行されるので注意
例:
for (int i = 1; i <= 3; i++) { //1~3年について繰返す①⑪
for (int j = 1; j <= 4; j++) { //その1~4組について繰返す②⑤⑧⑫⑮
if (i == 1 && j == 3) { //1年の3組以降は表示しない③⑥⑨⑬⑯
break; //⑩
}
Debug.Log(i + "年" + j + "組");④⑦⑭⑰…
}
}
実行すると 1年1組、1年2組、2年1組、2年2組、2年3組、2年4組、3年1組、…となる
アレンジ演習:p.113 chap3_5_2.cs つづき
・50以上の積については表示しないようにしよう ・実行結果 「1,」 「2,4,」 「3,6,9,」 「4,8,12,16」 「5,10,15,20,25」 「6,12,18,24,30,36」 「7,14,21,28,35,42,49」 「8,16,24,32,40,48,」 「9,18,27,36,45,」
作成例
using UnityEngine;
public class chap3_5_2 : MonoBehaviour {
public int xa = 9; //パブリック変数
void Start() {
for (int x = 1; x <= xa; x++) { //1の段から9の段まで繰返す
string s = ""; //連結用の文字列変数を空で初期化
for (int y = 1; y <= x; y++) { //各段の×1から×段数まで繰返す
if (x * y >= 50) { //積が50以上なら
break; //この段の繰り返しを抜ける(次の段へ)
}
s = s + x * y + ","; //積とカンマを連結
}
Debug.Log(s); //連結結果を出力
}
}
}
ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO!
ゲーム領域で停滞も…高収益体質を築いたSHIFTの戦略的人材強化【ゲーム企業の決算を読む】GO!
AI時代のゲームインフラとセキュリティ―ゲーム開発者が知るべき最新テクノロジーをアカマイが解説【CEDEC 2025】GO!
モノリスソフト東京オフィスが人材を積極募集中―「ゼノブレイド」シリーズ総監督の「新作RPG」に向けた動き? GO!
トランプ政権で“デジタル遺産の危機”に直面…保管プロジェクトや教育ゲームも支援打ち切りで資金難に GO!
スイッチ海賊版サイト「Nsw2u」をFBIが摘発。現在はアクセス不可に GO!
中古スイッチソフト使用でスイッチ2が遠隔BAN!?迅速対応で一安心も復旧にゲームのパッケージ写真等の証明必要に GO!
PC全年齢向け人気タイトルがSteamではコンソール版相当の内容に、なぜ?―お詫び文掲載の事態に…国内メーカー悩ます、ユーザーとプラットフォームの板挟み GO!
次回予告:p.110「繰り返し文を2つ組み合わせる」から
講義メモ:memo20250706.txt
補足:前判定繰り返しと後判定繰り返し
・繰り返しには繰返し条件の判断タイミングで、前判定と後判定がある ・while文とfor文は前判定であり、繰り返しの初回を行う前に継続条件を評価する ・よって、最初から継続条件がfalseになる場合、1度も実行しないので、そのような場合に便利 例:モンスターがいる間、戦う=いなければ1度も戦わない場合、事前にモンスターがいるかどうかの判断は不要になる ・しかし、繰り返しを行ってから続けるかどうか判断する場合に不便なので、後判定繰り返しの構文としてdo-while文も提供されている
補足:do-while文
・唯一の後判定繰り返しの構文
・書式: do { 繰り返し内容 } while(継続条件); //末尾にセミコロンが必要
・p.101 chap3_2_1のように「●●した結果、●●になるまで繰返す」処理に向いている
・あるいは、動的に情報を得る処理で「適切な情報が得られるまで先に進まない」場合に便利
・なお、この場合の継続条件は「適切ではない情報が得られている間」になる
ミニ演習 mini108c.cs
・p.101 chap3_2_1をdo-while文で書き直そう
作成例
//ミニ演習 mini108c.cs :p.101 chap3_2_1をdo-while文で
using UnityEngine;
public class mini108c : MonoBehaviour {
public int shikin = 30000; //パブリック変数で資金を
const int unit = 5080; //単金を表す定数の定義
void Start() {
do { //【変更】以下繰返し
Debug.Log(shikin);
shikin -= unit; //資金から単金を差し引く
} while (shikin >= unit); //【変更】資金が単金以上ある間、繰り返す
Debug.Log("終了時の資金は" + shikin);
}
}
p.109 繰り返しからの脱出
・繰り返しの終了は本来は継続条件がfalseになった時が望ましい ・しかし、例外的状況の発生や、継続条件が複雑な場合に、脱出用の文として、breakを利用できる ・switch文でも使われていたように、breakはブロック脱出文であり、while/for/doでも利用可能 ・なお、while(true)やfor(;;)で無限ループにしておき、なんらかの状況によりbreakで脱出するケースは(特にゲームでは)多い ・breakはいくつでも記述できるが、break直後に処理文があると絶対に実行されないので、文法エラーになる ・なお、breakにより、breakがある繰り返しブロックの末尾の「}」の後ろへジャンプするので、後続の処理が実行される(終了とは限らない) ・また、多重ループの場合、外側のループは継続される(後述)
ミニ演習 mini109a.cs
・p.105 chap3_3_1で「ハロー」の表示回数(5)をパブリック変数で指定できるようにしよう ・ただし、6回目になったらbreakするようにしよう ・つまり、繰り返し回数を自由にする代わりに、リミッターを儲けたい場合にbreakは便利 ・また、forブロックの末尾の「}」の後に適当なDebug.Logを追記し、breakした場合にも実行されることを確認しよう
作成例
//ミニ演習 mini109a.cs :p.105 Chap3_3_1・改
using UnityEngine;
public class mini109a : MonoBehaviour {
public int num = 5; //パブリック変数で回数を指定
void Start() {
for (int cnt = 0; cnt < num; cnt++) { //num回繰り返す
Debug.Log(cnt + "回目のハロー!");
if (cnt >= 6) { //ただし6回以上になったら
break; //脱出する
}
Debug.Log("次へ!"); //breakすると実行されない
}
Debug.Log("終了!"); //breakしても実行される
}
}
p.109 繰り返しのスキップ:continue
・for/while/doの中で「continue;」を実行すると、実行中の繰り返しの後続部分をスキップして、続行できる ・つまり「今回は、ここまででOKなので、次へ行け」としたい場合に用いる ・よって、break;とは異なり、繰り返しは続行される ・主に、繰り返しの中に特殊パターンがあり、if文などでは表現しづらい場合に便利 ・あるいは、繰り返し内容が長く、ifなどのネストが深い場合に用いると読みやすくなることがある
ミニ演習 mini109b.cs
・1から10まで下記を繰返す ① 3の倍数ならば ・「3の倍数」と表示 ・しかも、偶数ならばこれ以降はスキップする ② カウンタの値を表示
作成例
using UnityEngine;
public class mini109b : MonoBehaviour{
void Start() {
for(int i = 1; i <= 10; i++) {
if (i % 3 == 0) { //3の倍数?
Debug.Log("3の倍数");
if (i % 2 == 0) { //しかも偶数?
continue; //これ以降はスキップして次へ
}
}
Debug.Log("カウンタは" + i);
}
}
}
ミニ演習 mini109c.cs:breakとcontinueの併用
・string型のパブリック変数flgを定義して"y"で初期化しておく ・1から10まで下記を繰返す ① 3の倍数ならば ・flgが"y"であれば、スキップ(continue)する ・flgが"y"以外であれば、繰り返しを脱出(break)する ② カウンタの値を表示 ・表示した値の合計を表示
提出:ミニ演習 mini109c.cs:breakとcontinueの併用
・p.105「インクリメント演算子:補足(前置と後置の違い)」の後でp.106「メッセージの中に回数を入れる」に進みます
アレンジ演習:p.105 Chap3_3_1
・「ハロー」の表示回数(5)をパブリック変数で指定できるようにしよう
作成例
//アレンジ演習:p.105 Chap3_3_1
using UnityEngine;
public class chap3_3_1 : MonoBehaviour {
public int num = 5; //パブリック変数に
void Start() {
for (int cnt = 0; cnt < num; cnt++) { //num回繰り返す
Debug.Log("ハロー");
}
}
}
p.105 インクリメント演算子【再掲載】
・複合代入演算子で1を足しこむ処理はカウントアップなどで多用されるので、専用の単項++演算子が提供されており、 インクリメント演算子と言われる ・「変数 += 1」は「変数++」または「++変数」と記述できる ・for文のカウントアップのように、1を足しこむ処理を単独で行うのであれば「変数++」「++変数」のどちらでも良い
p.105 インクリメント演算子:補足(前置と後置の違い)
・「++変数」を前置インクリメント、「変数++」を後置インクリメントといい、演算子の評価タイミングが異なる ・前置インクリメント「++変数」では「前もって+1し、した後の値が評価になる」 ・後置インクリメント「変数++」では「現在の値を評価とし、その後で+1する」 ・どちらを使うというルールを決めることはあまりなく、ニーズに合わせて使い分けると良いが、 for文のカウントアップのように、1を足しこむ処理を単独で行う場合は、どちらかに決めておくことが多い (このテキストでは後置)
ミニ演習 mini105a.cs
・変数numを5で初期化しておき、「++num」「num」「num++」「num」の順に出力することで、値の変化を確認しよう
作成例
using UnityEngine;
public class mini105a : MonoBehaviour {
void Start() {
int num = 5;
Debug.Log(++num); //6(+1してから値を返す)
Debug.Log(num); //6(+1されている)
Debug.Log(num++); //6(値を返してから+1する)
Debug.Log(num); //7(+1されている)
}
}
p.106 メッセージの中に回数を入れる
・for文の先頭で代入・初期化したカウント用の変数は、forブロックの中で利用可能 ・なお、for文の先頭で初期化したカウント用の変数の有効範囲は、forブロックの中だけになる ・こうすることで、for文を多数記述しても、カウント用の変数は同じ名前でかまわない(同名の異なる変数とみなされる) ・よって、カウント用の変数をforブロックの外(後方)でも用いたい場合は、for文の前であらかじめ宣言しておけばよい。
アレンジ演習:p.105 Chap3_3_2
・forブロックの終わりの「}」の次の行として、cntの値を表示する処理を追記し、エラーになることを確認しよう ・それから、for文の前に、変数cntの宣言を挿入し、for文先頭の初期化を代入に変更して、エラーを解消しよう
作成例
//アレンジ演習:p.105 Chap3_3_2
using UnityEngine;
public class Chap3_3_2 : MonoBehaviour {
void Start() {
int cnt; //【追加】forブロックの後でも利用できるように事前に宣言
for (cnt = 0; cnt < 5; cnt++) { //【変更】初期化ではなく代入して利用
Debug.Log(cnt + "回目のハロー!");
}
Debug.Log("次は" + cnt + "回目のハロー!"); //【追加】forブロックの後でも利用できる
}
}
p.108 逆順で繰り返す
・forによる繰り返しはインクリメントに限るものではない ・必要に応じて、デクリメントを用いてカウントダウンで繰り返すことも多い ・初期値の設定や、継続条件に注意して、無限ループにならないよう、注意しよう
アレンジ演習:p.108 Chap3_4_1
・Debug.Logの回数(5)をパブリック変数で指定できるようにしよう
作成例
using UnityEngine;
public class Chap3_4_1 : MonoBehaviour{
public int num = 5; //【追加】
void Start() {
for (int cnt = num; cnt > 0; cnt--) { //【変更】
Debug.Log(cnt + "回目のハロー!");
}
}
}
ミニ演習 mini108a.cs
・for文で、2以上10以下の偶数を全て表示しよう ・この10をパブリック変数で指定できるようにしよう ・なお、1以下が指定されたら、なにも表示されないことも確認しよう
作成例
using UnityEngine;
public class mini108a : MonoBehaviour{
public int num = 10;
void Start() {
for (int cnt = 2; cnt <= num; cnt += 2) { //2から10まで+2しつつ繰返す
Debug.Log(cnt);
}
}
}
ミニ演習 mini108b.cs
・身長(m)をdouble型のパブリック変数で、体重(kg)の下限と上限をint型のパブリック変数で受け取り、1kg刻みでBMIを表示しよう ・BMIは体重(kg)÷身長(m)÷身長(m)で得られる ・できたら、何kg刻みで表示するかも、int型のパブリック変数で受け取るようにしよう
作成例
using UnityEngine;
public class mini108b : MonoBehaviour{
public double height = 1.7;
[Header("体重何kgから何kgまで何kgごとに?")]
public int from = 50;
public int to = 60;
public int each = 2;
void Start() {
for (int i = from; i <= to; i += each) { //form以上、to以下、eachごとに繰返す
Debug.Log("体重" + i + "kgのBMIは" + i / height / height);
}
}
}
ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO!
スイッチ2抽選販売に手ごたえありも、想定外の需要。任天堂6月の株主総会質疑応答の要旨公開―スイッチ2の普及拡大に全力を挙げる GO!
開発中『ジュラシック・ワールド・エボリューション3』“生成AI”利用アセットの削除発表―コミュニティからの反発受け対応へ GO!
カプコン、“カスタマーハラスメント”に対し注意喚起―『モンハンワイルズ』公式Xも「一定の限度を超えた誹謗中傷が見受けられる」と投稿 GO!
『デレステ』新規アイドルやイベントの更新停止へ…PC版はサービス終了など、開発・運用体制が大幅縮小 GO!
マイクロソフト約9,000人レイオフへ。レア社開発『EVERWILD』は開発中止に GO!
Xbox担当プロデューサー「レイオフ対象者はAIの活用を」と提案し炎上―人員整理はAI技術投資の皺寄せとの分析も GO!
『Forza Motorsport』開発チームはもう存在しない……Turn 10 Studios元開発者が報告―MSの大規模レイオフが影響か GO!
「殺すな!」オンラインゲームの完全サ終に異唱える署名活動が第一目標の100万件達成!終了まで1か月の土壇場オンラインデモで一気に30万件獲得 GO!