ToDoリストCLIアプリ | ステップ②:複数タスクの登録と一覧表示

・学習時間:1時間

・ステップ2でやったこと

①登録処理を「end」を記述するまで繰り返すようにした。

②登録されたタスクを番号付きで一覧表示されるようにした。

・使った技術・文法

①loop: 終了条件がない繰り返しメソッド

②if ~ break: 条件~に当てはまった場合にloop処理を抜ける

③each_with_index: 要素とインデックスをセットで使える繰り返し処理

・書いたコード

tasks = []

puts "タスクを入力してください。\n終了したいときは「end」を入力してください。"

loop do
  input = gets.chomp
  if input == "end"
    break
  end
  tasks.push(input)
end

tasks.each_with_index do |task, i|
  puts "#{i + 1}: #{task}"
end

・詰まったこと&調べたこと

each_with_index のブロック引数は逆でもいいのか気になって調べた→結果:ダメらしい。ブロック引数は |要素, インデックス| の順で固定でないと動かないとわかった。

・感想,次のステップ

明日の朝活でタスクの削除機能にチャレンジします。

4/1の朝学習記録 「Ruby初心者がToDoリストCLIアプリを作ってみます|ステップ①:タスクを登録する」

学習時間:1時間

  1. なぜ作ろうと思ったか

アウトプット主体の学習に切り替えるため。

2.ステップ1でやったこと

タスクを1つ登録して配列に追加して表示する。

3.使った技術・文法

puts,gets,chomp,Array#push

4.書いたコード

tasks = []

puts "タスクを入力してください"

input = gets.chomp
tasks.push(input)

p tasks

5.次のステップ 今日の夜、タスクの複数登録と一覧表示にチャレンジします!

3/23(日)のダイアリー

【1】学習内容

・コース名:業務効率化 BizHuck

・レッスン名:GAS

・やったこと:GASとLINE Developersを使用して精肉原料の賞味期限を決まった時間にLINEに通知する機能を作成してみた。

【2】本日の学習時間

・ 1時間 分

【3】本日の学習を通したポジティブな気づき

function checkExpirationDate() {
  const token = "トークン"
  const userId = "ID";

  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const data = sheet.getDataRange().getValues();

  // 今日の日付を取得
  const today = new Date();
  today.setHours(0, 0, 0, 0);

  const targetDate7 = new Date(today);
  targetDate7.setDate(today.getDate() + 7);

  const targetDate2 = new Date(today);
  targetDate2.setDate(today.getDate() + 2);

  let messageBody = "";

  for (let i = 1; i < data.length; i++) {
    const meatName = data[i][0];
    const bestBefore = data[i][1];

    if (!meatName || !bestBefore) continue;

    const limitDate = new Date(bestBefore);
    limitDate.setHours(0, 0, 0, 0);
    Logger.log(limitDate);

    if (limitDate.getTime() == targetDate7.getTime()) {
      messageBody += `「${meatName}」の賞味期限は1週間後の${Utilities.formatDate(bestBefore, "JST", "M/d")}です。\n 早めに商品化してください!\n\n`;
    }

    if (limitDate.getTime() == targetDate2.getTime()) {
      messageBody += `「${meatName}」の賞味期限は2日後の${Utilities.formatDate(bestBefore, "JST", "M/d")}です。\n 今日までに商品化してください!\n\n`;
    }
  }
if(messageBody) {
    const message = {
      to: userId,
      messages: [
        {
          type: "text",
          text: messageBody
        }
      ]
    };

    const options = {
      method: "post",
      contentType: "application/json",
      headers: {
        Authorization: "Bearer " + token
      },
      payload: JSON.stringify(message)
    };

    const response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push",options);
    Logger.log(response.getContentText());
  } else {
    Logger.log("賞味期限通知が必要な肉はありませんでした。")
  }
}

・2日前と1週間前にLINEで通知を送る。

・トリガー

【4】難しかったこと・悩んだこと

・LINEに通知を送る方法。LINE notifyが終了してしまうため。

・セルを変えると読み取らないことがあるみたい。

【5】その他、考えたこと(任意)

・こちらの記事を参考にしました。

https://qiita.com/jksoft/items/4d57a9282a56c38d0a9c

3/20(木)朝活 GAS

やったこと 動画視聴しながらコードを書く。

学習時間 1時間

学び ・Googleのアプリは階層構造になっている。 階層構造の理解はコードを書いていく上で大切。

・GASの基本文型は クラス.メソッド(); 

(GAS)3/4(火)朝活ダイアリー

【1】学習内容

・カリキュラム GASで経費精算書精算書自動作成

function generateSettlementSheet() {
  // シートの取得
  const sheet = SpreadsheetApp.getActiveSheet();

  // 申請者、部署の取得
  let applicant = sheet.getRange("B1").getValue();
  let department = sheet.getRange("B2").getValue();
  
  // 費用データの取得
  let transportationFee = sheet.getRange("B5").getValue();
  let accommodationFee = sheet.getRange("B6").getValue();
  let meelFee = sheet.getRange("B7").getValue();

  // 合計を計算
  let totalFee = transportationFee + accommodationFee + meelFee

  // 税込の合計を計算
  let tax = totalFee * 0.1
  let totalWithTax = totalFee + tax

  // 申請書
  let settlementSheet = 
    "経費精算書\n" +
    "申請者:" + applicant + "(" + department + ")\n" +
    "[経費内訳]\n" +
    "交通費:" + transportationFee + "円\n" +
    "宿泊費:" + accommodationFee + "円\n" +
    "飲食費:" + meelFee + "円\n" +
    "小計:" + totalFee + "円\n" +
    "消費税:" + tax + "円\n" +
    "合計:" + totalWithTax + "円\n"; 
  
  // 申請書出力
  sheet.getRange("A10").setValue(settlementSheet);
  
  // 完了通知
  Browser.msgBox("経費精算書を作成しました");
}

【2】学習時間 ・1時間

【3】本日の学習を通したポジティブな気づき

・文末には;をつける

・文字列を結合するときは+を使うが、行を分けるときは忘れやすいので注意

【4】難しかったこと・悩んだこと

・各行末の+を書いてなくて表示されなかった笑

3/3 夜活 ユーザー詳細ページを作成

【1】学習内容 ・ユーザー名をクリックしたらユーザー詳細ページに遷移するようにパスを設定 ・ユーザー詳細ページでユーザーの情報が表示されるようにした。 【2】学習時間 ・1時間 【3】本日の学習を通したポジティブな気づき ・各テーブルごとに値を取得する必要がある。 ・ 【4】難しかったこと・悩んだこと ・投稿内容が表示されなかった。各テーブル(モデル)ごとに各コントローラーのアクションで値を取得する必要がある ・ 【5】その他、考えたこと(任意) ・言語化が難しい。