2021 ソフトウェア設計及び演習用の班Wiki

21::gr10::発表

プロジェクトのGitLab

発表用プログラムのGitLab
(作品はプロジェクトlastの中にまとめてあります)

プロジェクト名

ウィジェット

プロジェクト説明

メモ帳、時間割などの機能を持つウィジェットを作成

モジュール分け

・Webアプリケーション起動

・ホーム画面(担当:小笠原・小山内・藤村)
| |
| +ーホーム画面を、設定に応じて構築して表示する
| |
| +ー設定(担当:小笠原・小山内)
|   |
|   +ーものの配置を設定する
|   |
|   +ー背景を設定する(担当:五十嵐・藤村・小山内)
|      |
|      +ー背景画像のURLをテキストボックスに入力

+ー・機能:メモ(担当:小笠原・小山内・藤村)
| |
| +ーテキストエリアを表示

+ー・機能:時間割(担当:五十嵐・田中)
| |
| +ー時間割の登録・変更
| | |
| | +ークリックで書き込み用画面へ
| |
| +ー今日の時間割を表示

+ー・機能:リンク先(担当:一戸・藤森)
| |
| +ー別のタブor現在のタブで表示
| |
| +ー飛ぶリンクの設定

+ー・機能:計算機(担当:一戸・藤森)
  |
  +ー電卓を表示

モジュールごとの詳細

ホーム画面

home.htmlにてホーム画面を表示。クラスでマス目状にそれぞれのモジュールの表示位置や大きさを指定し、埋め込むようにiframeで表示する。
モジュールの位置情報は配列で管理し、配列の並びからモジュールの表示サイズを決定する。
画面右上の歯車アイコンをクリックすることで設定が可能。

homeposition.js
  • save()
    設定のselect要素から値を取り出し、JSON形式でlocalstrageに保存。
  • load()
    localstrageの中身で配列を初期化。localstrageが空の場合は、すべて空白で初期化。
  • create_home()
    配列の内容から、モジュールが連続しているマス目を調べ、それに応じてマス目の大きさを書き換える。
    モジュールが存在するかどうかでマス目のz-indexを変化させる(空白は優先度が低いように)。これは、事前にz-indexが高いクラスと低いクラスを用意し、場合に応じてクラスを切り替えて実現。
    配列の内容からそれぞれのクラスに表示するモジュールを知り、それに応じてクラスのsrcを書き換える。

設定

ホーム画面の歯車アイコンをクリックすることで設定が行えるようになる。
select要素をマス目の数並べ、そこから配置するモジュールの選択を行う。また、select要素の下の入力欄に画像のリンクを入力することで背景を変更できる。
"反映"ボタンによってモジュールの位置や背景の変更を保存することで反映できる。iframeはキャッシュが思いようで、設定が上手く反映されなかったためスーパーリロードで対処。

背景

  • 任意の画像のURLを入力し、背景とする機能。
  • background js
save back()

URLを入力したテキストボックスの中身をローカルストレージに保存する。

load back()

ローカルストレージに保存したURLを読み出すとともに、そのURLを背景表示用のタグ内のソース部分に流し込む。

  • ホームにおける背景機能の動き
    URLの入力、保存は設定画面にて実行できる。(反映ボタンでsave backの実行)
    実際に背景を読み込む機能として、ページを読み込んだ際にcreate home関数などと同様にload back関数を一度だけ実行している。

メモ

テキストエリアを表示し、その内容をlocalstorageに保存できる。ページの起動時にloadを呼び出してlocalstorateから保存されているメモの内容を取り出してテキストエリアに表示。

  • load()
    localstorageから値を取り出し、それをテキストエリアに渡す。localstorageが空だった場合は"メモは登録されていません。"をテキストエリアに渡す。
  • save()
    テキストエリアの内容をlocalstorageに保存。

リンク

localload() check?にチェックボックスがチェックされているかどうかを確認。
チェックされている場所と同じ番号のlocalStrageにURLとリンクの名前を保存。
addにタグを表示する位置を取得して入れる。
タグを生成して、hrefにURLをセットする。
a.innerHTMLでURLの名前をa要素にセット。
p.appendChild(a)でp要素にa要素をセット。
add.innerHTML = p.outerHTML;

save()
localload()と一緒に起動して、localStorage.setItem()でlocalStrageにURLと名前を保存する。

del()
localloadでテキストデータを入れる代わりに空白を入れて、データを削除する。

yomikomi()
window.onloadでロード時に起動して、localStrageからテキストデータを引き出して、localloadと同じ流れで表示する。

計算機

elem.valueを使ってテキストボックスに入力された文字列の評価を行い”=”が押された際に
計算結果をテキストボックス内に表示されるようにした。 elemで実現することが難しい場合には別で関数を使って計算できるようにした。 memoryr()
mresultの値をresult.valueに代入する。 memoryc()
mresultの値を0にする。 memoryp()
mresultにテキストボックスに入力された値を足す。この際テキストボックスには入力された値が残る。 memorym()
mresultから入力された値を引く。テキストボックスに入力された値は残る。 cl()
result.valueの値を空にする。 利点として文字列が認識できるのであれば直接テキストボックスに書かれたものでも計算される。

時間割

テキストエリア(5×5)にユーザーが時間割を入力する。
入力したら保存ボタンをクリックする。そうすると、25個のローカルストレージにそれぞれ科目名が保存される。
ブラウザを閉じるor更新したとしても、読み込みボタンを押すことで、ローカルストレージの内容をテキストエリアに出力する。
今日の時間割が見やすいようにjavascriptで今日の曜日を取得して、その曜日の時間割の背景に色を塗った。getDay()で曜日を取得してその値を変数dayOfWeekに代入している。そしてその値に応じてswitch文を用いてどの曜日に色を塗るかを選択している。例えば、今日が月曜日ならば、dayOfWeek=1となり、case(1)の内容を処理している。処理内容は、月曜日の列のid値mondayをGetElementByIdで取得してそのidのクラス名をiroというクラスに変更する。

デモのスクリーンショット

Screenshot from 2021-07-23 18-47-19(1).png
Screenshot from 2021-07-23 18-58-17.png

個人の感想

小笠原秀芽

初期の構想に近い物を作ることが出来たが、役割分担してさらにそれぞれの情報を共有することの難しさを感じた。 初めてのことが多く、分からないことが多い中での開発は大変だったが、開発を通して様々な知識を得ることができ、さらに自分が思っていた通りの表示を実現出来たときの喜びを感じることが出来た。
反省点としては、もっとGitを活用するべきだった。結局pushなどを活用せずに手作業でファイルを上げ下げしてしまっていたため、早い段階からGitの仕様について理解しておくべきだったと感じている。 また、班員同士のコミュニケーションをもっと活発に行い、互いの情報共有をもっと行うべきだったと感じている。
他にも反省点は多少あるが、何より班全員でウィジェットを作り上げることが出来てよかった。

小山内秀

  • 最初はあまりにも知識と経験がなく、調べた内容が理解できなかったり、そもそも何をどう調べたらよいかがわからなかったが、回を重ねるごとに徐々にhtmlやjsに関してレベルアップできたと思う。
  • 私自身あまりプログラミングが得意ではなく、かなり他の班員に頼ってしまったような場面もあり、技術の向上だけでなく協力することの大切さも実感することができた。
  • また個人としての経験だけでなく、「グループ開発」の経験も積み、成長できた。どうモジュール分けをしたら開発しやすいか、どういった構造にしたら統合する際に不具合が起きないかなど、一人では体験し得ない経験を積めたと想う。
  • まだまだわからないことも多く、技術も不足しているが、半年の作品制作を通して少し自身がついたり、開発に対する興味を持てたと思う。

一戸健登

最終発表を行い、最初に想定していたようなものを完成することができたと思う。
役割分担をしていたため他のグループではどのような問題点が存在していて、どのように完成に近づけていったのかはわからないが、互いにコードの使えそうなところを自分のコードに取り入れるなどしていたので、藩内でのコミュニケーションは上手くできていたような気がする。今回一番大きな負担をかけてしまったのはメインを担当したメンバーだったがこちらから改良できることは改良して反映がしやすいように指定桁と思っている。

藤村律希

最後の最後で表示したいものが表示されないなどのトラブルもあったものの、なんとか仕上げることができた。
また、もっと違う方法でここのプログラムを作れなかったかなど反省する点も多々あるように思い返される。
それでも改めて中間発表と比べてみると見違えるほどよいプログラムができていた。
みんな最初の頃は右も左もわからない、そもそもhtmlって何?という状態から始まった。にもかかわらずここまで仕上げることができたのは仲間との連携があってのことだろう。
特にローカルストレージの使い方などわからないところは仲間の知識無くして実装は叶わなかった。
モジュールごとに分担して各々がバラバラに進行して作り上げた機能も、全てを統合できたのはメイン画面を担当してくれたメンバーのおかげだ。
実習を通し、仲間と協力することの大切さを学んだ。

五十嵐晃太

グループ結成当初は、初対面の人も多く、発言もしづらい雰囲気だったが、回を重ねるごとに知識を共有したりプログラムの確認をしたりとコミュニケーションが取れるようになっていくのを実感した。それでも、コミュニケーション不足でうまく行かないこともあり、これについてはこれからコミュニケーションを取る機会を多く経験していくしかないと思った。
グループで作ったものが形になったときの達成感は、一人で何かを作った時よりも大きいものだと思った。一人のときと違い、コミュニケーションという壁を乗り越えるのは困難だったが、それでもうまくコミュニケーションを取ろうと試行錯誤して実践した経験は、成功失敗にかかわらず価値あるものになったと思う。これからに活かして生きたい。

田中悠太

最初は全く何もわからない状態から始めて調べ方もよくわからず、ちょっとした機能を実装するだけでもとてつもない時間がかかってしまったが何とか形にすることができてよかった。 基礎的なところを形にするところが時間がかかってしまったがそこで班員の協力もありうまくできたのでよかった。 初対面の人同士だったこともありコミュニケーションが少しうまくいかない部分があったのでその点を次回の課題としてやっていきたい。


最終更新日:2021/08/06 18:22:19